在Scala中获取方法中的Abstract错误

时间:2019-02-21 02:36:38

标签: java scala

我遇到错误:声音方法不能抽象。但是,当我删除“抽象”时,得到的类Dog和Cat需要抽象。我究竟做错了什么?任务说,“狗和猫”课应该保持具体。任务在下面。

package inheritance

abstract class Animal(name: String) {
abstract def sound(): String
override def toString(): Animal
}

class Cat(var name: String)
extends Animal(name)
{
override def sound() = {
"meow"
}
}

class Dog(var name: String)
extends Animal(name){
override def sound() = {
"woof"
 }
}

object Park{
def animals() = {
List(new Dog("Snoopy"), new Dog("Finn"), new Cat("Garfield"), new 
Cat("Morris"))
}

def makeSomeNoise(first :List[Animal]): List[String] = first.map(_.sound())
}

任务:

问题:[Scala]在一个名为“继承”的包中,创建一个名为“动物”的抽象类,以及一个名为“猫”和“狗”的具体类。

创建一个名为“ Park”的对象:

动物:构造函数,它使用名为name的字符串(请勿使用val或var。

它将在基类中声明);

名为sound的抽象方法,该方法不带任何参数并返回String

•重写toString以返回此动物的名称

猫:天生动物; 构造函数,将名为name的String作为值(使用val声明name);覆盖sound()以返回“喵”

“狗:固有动物;构造函数,将名为name的字符串作为值(使用val来声明名称);重写sound()返回“ woof”

公园:
•名为“ animals”的方法,不带任何参数,并返回包含

的动物列表

•2条名为“史努比”和“芬恩”的狗

•2只猫,名字分别是“加菲猫”和“莫里斯”

•名为“ makeSomeNoise”的方法,该方法将动物列表作为参数,并返回包含输入列表中每只动物发出的噪音的字符串列表

1 个答案:

答案 0 :(得分:2)

好的,让我们解决其中的一些问题。

  

名为sound的抽象方法,该方法不带任何参数并返回String

修饰符abstract仅用于类定义。抽象方法是抽象类中的方法,该方法没有主体,只显示名称和类型。

  

重写toString以返回此动物的名称

您尚未执行此操作。当前,您的toString方法也是抽象的。

  

猫:天生动物;构造函数,将名为name的String作为值(使用val声明name);覆盖sound()以返回“喵”

这里说要使用val,但是您的代码中有var

所以您在CatDog上遇到问题的原因是因为Animal在您当前定义时有两种抽象方法,您需要实现(覆盖)这两种方法创建动物的实例。

修复toString方法,使其不再是抽象的,并返回正确的结果,您应该一切顺利。