Подкласс Java проходит через конструктор суперкласса

Итак, у меня есть подкласс, который наследуется от другого класса. Я хочу создать объект подкласса Test и передать его свойства другому классу под названием Engine (объяснено ниже).

package comulap;


public class Test extends Comulap {


    public String fudge = "fudge";

    public static void main(String[] args){
        Test c = new Test();
    }

}

Это суперкласс Comulap

package comulap;

import comulap.core.Engine;

public class Comulap {

    public String fudge;


    Engine engine;

    public Comulap(){

        engine=new Engine(this);
    }
}

И это класс движка, в котором я хочу использовать методы и атрибуты Test:

package comulap.core;

import comulap.Comulap;

public class Engine {

    Comulap comulap;

    public Engine(Comulap c){
        comulap=c;
        System.out.println(comulap.fudge);
    }

}

Однако, когда я запускаю это, объект движка считает, что fudge имеет значение null, как будто передается только обычный объект Comulap, а не класс Test. Как передать класс Test в обычном конструкторе класса Comulap, а не только в стандартный класс Comulap?

Вы определяете новую, другую переменную-член fudge в Test. Вместо этого установите fudge в конструкторе Test и не определяйте его (снова).

Michael Butscher 10.09.2018 00:09

Переменные не являются полиморфными, и вместо этого вы захотите не скрывать переменную fudge, как вы это делаете, а вместо этого устанавливать и получать ее через сеттеры и геттеры.

Hovercraft Full Of Eels 10.09.2018 00:10

Я только что осознал эту ошибку, исправил ее, назначив fudge в конструкторе теста, однако это все равно возвращает null в объекте движка.

James Clarke 10.09.2018 00:13

Вы 1) избавились от повторного объявления переменной в Test? 2) Используете ли вы для доступа к нему геттеры и сеттеры? 3) Правильно ли вы его назначаете в конструкторе? В супер конструкторе тоже?

Hovercraft Full Of Eels 10.09.2018 00:17

Кроме того, вы пытаетесь получить доступ к fudge String в конструкторе Engine, который вызывается в конструкторе Comulap - поэтому вы пытаетесь оценить состояние объекта Comulap до, который был полностью построен, что вам следует сделать никогда.

Hovercraft Full Of Eels 10.09.2018 00:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
19
0

Другие вопросы по теме