Как правильно настроить класс, который наследуется от другого в Scala? - PullRequest
0 голосов
/ 30 марта 2012

Я просматривал примеры в Интернете и учебные пособия, и я не могу найти ничего, что объясняет, как это (наследование) отличается от Java.Простой пример:

class Shape {
String type;
Shape(String type) {
    this.type = type;
  }
...
}

class Square extends Shape {
Square(String name){ 
    Super(name);
  }
....
}

Что меня смущает, так это то, что в приведенном выше примере мне нужно вызвать суперкласс, чтобы задать переменную type, а также получить к нему доступ, чтобы сообщить мне объекты Boxтипа также.В Scala, как это можно сделать?Я знаю, что Scala также использует интерфейсы признаков, но приведенный выше пример полностью исключен из Scala?Может кто-нибудь направить меня к хорошему примеру или объяснить это.Я действительно ценю это.

1 Ответ

5 голосов
/ 30 марта 2012

Вы можете написать почти то же самое в Scala, гораздо более кратко:

class Shape(var `type`: String)
class Square(name: String) extends Shape(name)

В первой строке тот факт, что type предшествует var, заставляет компилятор добавлять методы получения и установки (из "5.3 Определения классов" в спецификации ):

Если формальному объявлению параметра x : T предшествует val или var ключевое слово, определение метода доступа (получателя) (§4.2) для этого параметра неявно добавляется в класс. Получатель вводит значение члена x класса c, которое определяется как псевдоним параметра. Если вводным ключевым словом является var , средство доступа к сеттеру x _= (§4.2) также неявно добавляется в класс.

Во второй строке name не предшествует val или var, и поэтому он является просто параметром конструктора, и в этом случае мы передаем конструктор суперкласса в предложении extends. Для name не добавляются методы получения или установки, поэтому, если мы создали экземпляр square со значением Square и вызвали square.name, он не скомпилировался бы.

Обратите внимание, что type - это ключевое слово в Scala, поэтому мне пришлось заключать его в обратные кавычки как в определении, так и в приведенном выше примере:

Пример 1.1.2 Заключенные в кавычки строки представляют собой решение, когда необходимо получить доступ к идентификаторам Java, которые являются зарезервированными словами в Scala.

Существует множество ресурсов, которые вы можете прочитать для получения дополнительной информации о наследовании в Scala. См., Например, главы 4 и 5 Программирование Scala .

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