2014-11-13 3 views
-2

Я пытаюсь получить базовый объект из родительского объекта, но я не могу. У нас есть что-нибудь подобное? `Java - получить родительский объект из дочернего объекта

public class A 
{ 
} 

public class B extends A 
{ 
    A obj = this.getParentObject();  
} 

Thanks Фахда Mullaji

+3

https://docs.oracle.com/javase/tutorial/java/IandI/super.html Хотя кажется, что это довольно хаки, что вы пытаетесь сделать сейчас. Подкласс не должен содержать ссылку на базовый класс, что даже не имеет смысла. –

+0

My A class - это класс Entity в спящем режиме. Я не хочу писать какие-либо функции в классе сущности, но я хочу, чтобы объект объекта в дочернем классе для вставки. –

+0

Нет такой вещи, как * родительский объект *. Java использует наследование на основе классов. –

ответ

0

Там нет такого понятия. Вы создаете экземпляр объекта из класса B, который расширяет A. Это всего лишь один объект, не «содержит» внутри него. Предположим, что A имеет и другие свойства:

public class A 
{ 
    public int a; 
} 

public class B extends A 
{ 
    public int b; 
} 

Объекты класса B будут иметь оба атрибута a и b.

С ключевым словом «супер» вы можете получить доступ к методам из базового класса. Но вы не можете «получить объект» из базового класса.

2

Вы должны прочитать как super ключевых слов и inheritance работает в Java.

Получение суперкласса, или класс, который распространяется на ваш класс, в действительности не является обязательным. Смотрите рисунок ниже:

public class A { 

    protected int value; 

    public A() { 
     this.value = 2; 
    } 

} 

public class B extends A { 

    public B() { 
     System.out.println(value); // prints 2 
    } 

} 

Чтобы сослаться на суперкласса, используйте супер ключевое слово. См. Пример ниже:

public class A { 

    public void doStuff() { 
     System.out.println("parent"); 
    } 

} 

public class B extends A { 

    public B() { 
     doStuff(); // prints "child" 
     super.doStuff(); // prints "parent" 
    } 

    @Override 
    public void doStuff() { 
     System.out.println("child"); 
    } 

} 

Надеюсь, это ответит на ваш вопрос.


Hacky и вообще ненужный материал

Вы можете, конечно, получить родительский объект. Для этого я рекомендую сделать защищенный (или общедоступный) метод для класса А, который возвращает себя. См. Пример кода ниже:

public class A { 

    protected A getMe() { 
     return this; 
    } 

} 

public class B extends A { 

    public B() { 
     A superInstance = getMe(); 
    } 

} 

Это непроверенный код, но я не понимаю, почему это не сработает.

Смежные вопросы