通过继承在Java中使用父类实例访问子类成员

时间:2019-01-28 11:44:27

标签: java inheritance parent-child

在继承的概念中,我经历了使用父类实例访问子类成员的过程,但由于引发错误而无法正常工作。我的代码如下:

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 :(得分:2)

由于对父类p的引用,因此只能访问父类定义的方法和字段。

如果您需要访问子类定义的方法和字段,则需要进行强制转换:

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

提示:pc不是类的好名字。最好使用描述性词语。在此示例中,甚至ParentChild也会更好。

答案 1 :(得分:0)

这将不起作用,因为类p没有字段branch。您可以将其转换为c,然后从中获取分支,因为oc((c)o).branch的实例。这将起作用,因为您知道oc的实例。 (即p o= new c();

正如@NickJ所提到的,类名和变量应该比pc更为冗长/更具描述性(类通常以大写字母开头,例如Parent或{{1} })