В классе, что означает A ob = new B () - PullRequest
0 голосов
/ 12 января 2020
class Main{
    public static void main(String args[]){
        A ob = new B();
        System.out.println(ob.x);   
    }
}
class A{
    int x;
    public A(){
    x = 10;
    }
}
class B extends A{
    int x;
    public B(){
    x = 20;
    }
}

Вывод кода равен 10. Я не понимаю, как это работает. И почему B ob = new A() не действует? Также есть ли реальное использование этого?

1 Ответ

1 голос
/ 12 января 2020

Если родительская ссылочная переменная содержит ссылку на дочерний класс, и у нас есть переменная «value» как в родительском, так и в дочернем классе, она будет ссылаться на переменную «value» родительского класса, независимо от того, содержит ли она дочерний класс ссылка на объект.

Ссылка, содержащая ссылку на объект дочернего класса, не сможет получить доступ к членам (функциям или переменным) дочернего класса, поскольку компилятор использует специальный механизм полиморфизма во время выполнения только для методов.

Пожалуйста, обратитесь: Родительский дочерний класс с таким же элементом данных

Каждый ребенок является родителем, но не каждый родитель является ребенком.

Пожалуйста, обратитесь: Ребенок не может сослаться Родитель

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...