Получение абстрактной ошибки в методе в Scala - PullRequest
0 голосов
/ 21 февраля 2019

Я получаю ошибку: метод звука не может быть абстрактным.Но когда я удаляю «абстрактный», я получаю, что класс Dog и Cat должен быть абстрактным.Что я делаю неправильно?Задание говорит, что класс 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] В пакете с именем «Наследование» создайте абстрактный класс с именем «Animal» и конкретные классы с именем «Cat» и «Собака".

Создание объекта с именем «Park»:

Animal: конструктор, который принимает строку с именем name (не используйте ни val, ни var.

Он будет объявлен вбазовые классы);

Абстрактный метод с именем sound, который не принимает параметров и возвращает строку *. 1014 *

. • Переопределите toString, чтобы вернуть имя этого животного.

Cat: Inherent Animal;Конструктор, который принимает String с именем name в качестве значения (используйте val для объявления имени);Переопределить звук (), чтобы вернуть «мяу

» Собака: врожденное животное;Конструктор, который принимает String с именем name в качестве значения (используйте val для объявления имени);Переопределите sound () для возврата «woof»

Park:
• Метод с именем «animals», который не принимает параметров и возвращает список животных, содержащий

• 2 собаки с именами "Snoopy "и" Finn "

• 2 кошки с именами" Garfield "и" Morris "

• Метод с именем" makeSomeNoise ", который принимает список животных в качестве параметра и возвращает списокстрок, содержащих шумы от каждого животного в списке ввода

1 Ответ

0 голосов
/ 21 февраля 2019

ОК, давайте рассмотрим некоторые из них.

Абстрактный метод с именем sound, который не принимает параметров и возвращает строку

Модификатор abstract толькоиспользуется в определениях классов.Абстрактный метод - это метод внутри абстрактного класса, и этот метод не имеет тела, представлены только имя и типы.

Переопределите toString, чтобы вернуть имя этого животного

Вы этого не сделали.В настоящее время ваш toString метод также является абстрактным.

Кошка: врожденное животное;Конструктор, который принимает String с именем name в качестве значения (используйте val для объявления имени);Переопределите sound (), чтобы вернуть «мяу»

Здесь сказано, что нужно использовать val, но ваш код имеет var.

Так что причина, по которой у вас проблемы с Cat и Dog потому что Animal, как вы его сейчас определяете, имеет два абстрактных метода, и вам нужно реализовать (переопределить) оба для создания экземпляра животного.

Исправить toStringметод, так что он больше не является абстрактным, и возвращает правильный результат, и вы должны быть в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...