📜  父类和子类在Java中具有相同的数据成员

📅  最后修改于: 2020-03-23 01:02:36             🧑  作者: Mango

父类的引用变量能保存其对象引用及其子对象引用。
在Java中,方法是默认虚拟
非方法成员呢?例如,预测以下Java程序的输出。

// Java程序,展示非方法成员根据引用类型进行访问
class Parent
{
    int value = 1000;
    Parent()
    {
        System.out.println("父类构造器");
    }
}
class Child extends Parent
{
    int value = 10;
    Child()
    {
        System.out.println("子类构造器");
    }
}
// 测试代码
class Test
{
    public static void main(String[] args)
    {
        Child obj=new Child();
        System.out.println("子类引用类型 :"
                           + obj.value);
        // 注意使用 "Parent par = new Child()"
        // 会产生同样的效果
        Parent par = obj;
        // Par引用的obj 会访问父类的成员
        System.out.println("子类引用类型 : "
                           + par.value);
    }
}

输出:

父类构造器
子类构造器
子类引用类型 : 10
父类引用类型 : 1000

如果父级引用变量持有子类的引用,并且父级和子级中都有“值”变量,则无论父级引用变量是否持有子类对象引用,它都将引用父类“值”变量。持有子类对象引用的引用将无法访问子类的成员(函数或变量)。这是因为编译器仅对方法使用特殊的运行时多态机制。
可以使用父指针进行类型转换来访问子数据成员。请参阅示例的最后一个示例以获取完整的代码。