Предположим следующие классы существуют:Функциональность расширения класса в Java
public class A {
public void whatAreYou() {
System.out.println("A");
}
}
___________________________
public class B extends A {
public void whatAreYou() {
System.out.println("B");
}
}
Теперь мы инициализировать и б следующим образом:
A b = new B();
b.whatAreYou();
_______________
B a = new A();
a.whatAreYou();
Вопрос: Есть ли у этих программ работать без ошибок? Если нет, то чего не может быть ошибок?
Мое мнение:
Я думаю, что первая программа должна работать нормально, так как класс B является расширением класса А. Но я не могу сказать, какой тип объекта мы имеем здесь. Имеет ли он все атрибуты B тоже? Кроме того, он должен печатать «B».
Вторая программа не работает, но мне не хватает четкого объяснения.
Может ли кто-нибудь помочь мне?
Что происходит, когда вы пытаетесь скомпилировать это? Вторая программа «не работает» - какие сообщения об ошибках компилятор дает вам? Прочитайте их критически. –
A не является B. Каждая собака является животным, но не каждое животное является собакой. Вы не можете просить кошек кошки лаять –
Возможный дубликат [Java: разница между A x = new A() и A x = new B(), когда B расширяет A] (http://stackoverflow.com/questions/13077009/java-difference-between-ax-new-a-and-ax-new-b-when-b-extends-a) –