Пример наследования в Java - PullRequest
0 голосов
/ 26 июня 2018

В приведенном ниже примере:

class Parent{
    void fun() {
        System.out.println("Parent class");
    }
}

class Child extends Parent{
}

public class Main {
    public static void main(String[] ar) {
        Child ch = new Child();
        ch.fun();
    }
}

пример наследования, при создании экземпляра объекта мы можем создать объект как Parent ch = new Child();, который действителен, но почему мы не можем получить что-то подобное Child ch = new Parent(); Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

В вашем примере у вас есть class Child extends Parent{. Это означает, что Child является Parent, но Parent не является Child. Parent является более общим родительским классом (Ironic), а Child является более конкретным подклассом. Таким образом, вы можете сделать что-то вроде этого:

 Parent ch = new Child();

Поскольку вы объявляете общий объект Parent, а затем создаете его экземпляр как Child объект. Однако вы не можете сделать:

Child ch = new Parent();

Поскольку вы не можете объявить его как более конкретный объект Child, а затем создать его экземпляр как менее специфичный Parent объект

0 голосов
/ 26 июня 2018

Child ch = new Parent() недопустимо, потому что не каждый Parent является Child. Предположим, у вас был третий класс:

class AnotherChild extends Parent {int age = 2;}

Следующее также будет действительным:

Parent otherChild = new AnotherChild();

Если Cild child = new Parent() должно быть сделано действительным, то по той же причине

Child child = new AnotherChild()

Будет ли также должно быть сделано действительным, потому что AnotherChild является Parent.

Теперь ясно, что это проблематично, потому что Child отличается от AnotherChild.
Этот пример выбран, чтобы сделать его очевидным, но даже простой объект Parent (new Parent()) не является экземпляром Child, поскольку он не был создан с классом Child или любым из его подклассы.

Все это проверки типов во время компиляции, которые обеспечивают безопасность кода и совместимость объектов / переменных. Можно использовать разрешенные приведения, чтобы обойти проблему, но если объекты времени выполнения на самом деле несовместимых типов, выполнение все равно будет неудачным.

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