Java: не могу получить значение поля супер класса в дочернем
Изучаю Java и столкнулся с проблемой получения значения поля родителя в дочернем классе. Подскажите куда копать для решения вопроса.
Как я понимаю написанный мной код: В методе main класса Main создается объект 'B'.Конструктор 'B' присваивает значение 10 полю 'int number' класса 'B'.Класс 'C' является наследником класса 'B' и должен иметь доступ ко всем его полям и методам. Но когда в классе 'C' я пытаюсь получить значение поля 'number' класса 'B' и вывести его на экран с помощью метода 'print', то получаю значение по умолчанию-0. Что мне нужно сделать, что бы получить значение поля 'number' из класса 'B' в классе 'C'? Если в 'B' поле сделать 'static int number' и обращаться к нему в 'C'-B.number, то все работает правильно. а как сделать это без static ? Код следующий:
public class Main {
public static void main(String[] args) {
B b = new B(10);
new C().print();
}
}
public class B {
int number;
B(int number){
this.number=number;
}
B(){};
}
public class C extends B{
public void print(){
System.out.println("Result = "+number);
}
}
Ожидается значение: 10 Получаю значение по умолчанию:0
Пробовал разные варианты с this, super, создавал новый объект 'B' в классе 'С'.Не выходит каменный цветок).
Ответы (1 шт):
ты создал 2 разных объекта B b = new B(10); B с параметром 10
и new C() с дефолтными параметрами.
когда ты создаёшь объект класса С new C()
дефолтный конструктор подкласса вызывает дефолтный конструктор суперкласса B(){}
поля класса по умолчанию инициализируются дефолтными значениями, поэтому выводится 0
объект класса С ничего не знает про состояние класса B, C просто создан по образу и подобию В
чтобы создать С с нужными параметрами, надо в конструкторе подкласса вызвать конструктор суперкласса через ключевое слово super
public C(int number) {
//с заданным параметром
super(number);
}
public C() {
// устанавливаем параметр по умолчанию
super(10);
}