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