Доступ к членам дочернего класса с экземпляром родительского класса в Java через наследование - PullRequest
0 голосов
/ 28 января 2019

Как и в концепции наследования, я прошел процесс доступа к членам дочернего класса с помощью экземпляра родительского класса, но он не работает так, как исключено из-за возникновения ошибки.Мой код выглядит следующим образом:

package base;

public class p {

    String college = "vrce";
    void does() {
        System.out.println("student");
    }
}

public class c extends p {
    String branch = "ece";


    public static void main(String[] args) {
        /*c o= new c();
                    System.out.println(o.college);
                    System.out.println(o.branch);
             o.does();
             all child and parent work*/

        p o = new c(); ////c p
        System.out.println(o.college);
        System.out.println((o.branch));
        o.does();


        /*            p o= new p();
                      System.out.println(o.college);
               //     System.out.println(o.branch);//child details can't
               o.does();*/
    }

}

Как показано выше p класс является родительским, а c является дочерним классом, и я хочу получить доступ к дочернему члену branch с экземпляром родительского класса как p o = new c();.

Если это возможно, то как это возможно?Если нет, то почему это невозможно.Пожалуйста, объясните мне в деталях?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Это не будет работать, потому что класс p не имеет поля branch.Вы можете привести его к c, а затем получить ответвление, поскольку o является экземпляром c, ((c)o).branch.Это будет работать, потому что вы знаете, o является экземпляром c.(т.е. p o= new c();)

Как упоминалось @NickJ, имена классов и переменные должны быть более подробными / описательными, чем p, c (классы обычно начинаются с заглавной буквы, например Parent или Child)

0 голосов
/ 28 января 2019

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

Если вам нужен доступ к методам и полям, определенным дочерним классом, вам нужно привести его:

System.out.println((c) o.branch);

TIP: p и c не являются хорошими именами для классов,Лучше всего использовать описательные слова.В этом примере даже Parent и Child были бы лучше.

...