首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正在Scala中实现工厂设计模式,当我试图访问子类方法时,出现了一个编译错误。

我正在Scala中实现工厂设计模式,当我试图访问子类方法时,出现了一个编译错误。
EN

Stack Overflow用户
提问于 2022-02-24 06:24:58
回答 1查看 35关注 0票数 0
代码语言:javascript
复制
 abstract class Computers{
    def hdd:String
    def RAM:String
    def CPU:String
  } 
   class PC(storage:String,memory:String,Cores:String) extends Computers{
   def display:String="This is PC"
    var device="PC"
    def hdd={
      "Hard disk"+" "+storage 
    }
    def RAM={
     memory
    }
    def CPU={
     Cores
    }
  }
   class LAPTOP(storage:String,memory:String,Cores:String) extends Computers{
    def see:String={
      "Hi All"
    }
    var device="Laptop"
    def hdd={
     storage
    }
    def RAM={
     device +":" +memory+" RAM"
    }
    def CPU={
      Cores
    }
  }
  object Computers{    
    def apply(compType:String,storage:String,memory:String,Cores:String)={
      compType match{
        case "PC"=>new PC(storage:String,memory:String,Cores:String)
        case "LAPTOP"=>new LAPTOP(storage:String,memory:String,Cores:String)
      }
    }  
    def main(args:Array[String]){
      val c1=Computers("PC","1 TB","12 GB","5 GHz")
      val c2=Computers("LAPTOP","1 TB","12 GB","5 GHz")
      println(c1.display)
      println(c1.hdd)
      println(c2.RAM)

    }
    
  }

我正在尝试实施工厂的设计模式。但是,当我试图调用子类方法( PC类的显示方法)时,得到了以下编译错误:“值显示不是计算机的成员,”,有人能帮我解释为什么会出现这个错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-24 07:17:35

您将得到此错误,因为当您使用Computers的apply方法时,您将得到一个类型为Computers的实例,该实例没有定义方法display (因为它仅在子类PC上定义)。

如果希望访问此方法,则需要有一个PC类型,而不是一个Computer类型。你可以用几种方式实现这一点。

PC

  • use

  • 使用PC的构造函数,以便您有一个PC

  • 模式匹配类型,以确保Computer是一个.asInstanceOf[PC],以便您可以调用该方法(不推荐此方法),因为如果您正在转换的内容实际上不是PC,则在运行时可能会失败。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71247947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档