2015-07-28 2 views
2

Почему я могу переопределить var в подклассе с def и другим def. Почему компилятор не жалуется?override/redefine var с def в подклассе, без ошибки компилятора

abstract class Person { 
    var age: Int  
} 

class Employee extends Person { 
    def age = 5 // does not allow override def age = 5, though 

    def age_=(a: Int) = { 
    age = a // infinite recursion 
    } 

} 

связанного с Why it's impossible to override var with def in Scala?

ответ

1

The spec говорится в декларации вара такой же, как объявить два метода.

Ключевое слово переопределения является необязательным, как обычно.

scala> abstract class B { var x: Int } 
defined class B 

scala> class C extends B { override def x = 42 ; def x_=(i: Int) = ??? } 
defined class C 

Связанный ответ смущает декларации и определения.

0

Давайте посмотрим на декомпилированный код Java (с использованием javap your.class):

public abstract class Person { 
    public abstract int age(); 
    public abstract void age_$eq(int); 
    public Person(); 
} 

public class Employee extends Person { 
    public int age(); 
    public void age_$eq(int); 
    public Employee(); 
} 

Как вы можете видеть результаты кода в age помечается, как абстрактные, так что вы в состоянии осуществить это.

Смежные вопросы