Почему выход:Как работает конструктор наследования Java?
> B.foo(): bar = null
> B.foo(): bar = B.bar
>a.bar = A.bar
>B.foo(): bar =B.bar
НО: не
> B.foo(): bar = null > A.foo(): bar = A.bar >a.bar = A.bar >B.foo(): bar =B.bar
1) B распространяется так же не предположить, называют в класс в? 2) Почему класс a.bar A называется, а не B? 3) Можете ли вы объяснить вывод? код:
public class A {
String bar= "A.bar";
A() { foo(); }
public void foo() {
System.out.println("A.foo(): bar = "+ bar);
}
}
public class B extends A {
String bar= "B.bar";
B() { foo(); }
public void foo() {
System.out.println("B.foo(): bar = "+ bar);
}
}
public class C {
public static void main(String[] args) {
A a= newB();
System.out.println("a.bar = "+ a.bar);
a.foo();
}
}
Пожалуйста, исправьте свой код. Он не будет компилироваться, как есть. – Carcigenicate
почему по строке: «A a = новый B();» выход имеет две линии? – user
Методы могут быть переопределены, полей быть не может. [Этот вопрос может помочь объяснить] (http://stackoverflow.com/questions/9414990/if-you-override-a-field-in-a-subclass-of-a-class- the-subclass-has-two- fields-wi) почему два поля с тем же именем не обрабатываются так же, как два метода с одной и той же сигнатурой. – Obicere