我在 Scala 中实现工厂设计模式,当我尝试访问子 class 方法时出现编译错误

I am implementing factory design pattern in Scala and got a compilation error when I tried to access a child class method

 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)

    }
    
  }

我正在尝试实施工厂设计模式。但是当我尝试调用子 class 方法(PC class 的显示方法)时出现以下编译错误: '值显示不是 Computers 的成员' 有人可以帮助我为什么会收到错误

您收到此错误是因为当您使用 Computers 的 apply 方法时,您得到的类型 Computers 的实例没有定义 display 方法(如此仅在子类 PC)

上定义

如果您想访问此方法,您将需要 PC 而不是 Computer 类型。您可以通过几种方式实现这一点,例如

  • 使用 PC 的构造函数,这样你就有了一个类型 PC
  • 模式匹配以确保 ComputerPC
  • 使用 .asInstanceOf[PC] 以便您可以调用该方法(不推荐,因为如果您正在转换的内容实际上不是 PC
  • ,这可能会在运行时失败