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);
    }
→ Ссылка