SUN目前的JVM实现机制,类实例的引用就是指向一个句柄(handle)的指针,这个句柄是一对指针:
一个指针指向一张表格,实际上这个表格也有两个指针(一个指针指向一个包含了对象的方法表,另外一个指向类对象,表明该对象所属的类型); 另一个指针指向一块从java堆中为分配出来内存空间。
1、通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。
2、不能把父类对象引用赋给子类对象引用变量。
3、一个类型引用只能引用引用类型自身含有的方法和变量。[code]package domatic;
//定义超类superA class superA
{ int i = 100;
void fun(int j) { j = i;
System.out.println("This is superA"); } }
// 定义superA的子类subB
class subB extends superA
{ int m = 1;
void fun(int aa)
{
System.out.println("This is subB");
}
}
// 定义superA的子类subC
class subC extends superA
{ int n = 1;
void fun(int cc)
{
System.out.println("This is subC");
}
}
class Test
{
public static void main(String[] args)
{ superA a = new superA();
subB b = new subB();
subC c = new subC();
a = b; a.fun(100);
a = c; a.fun(200);
}
}
上述代码中subB和subC是超类superA的子类,我们在类Test中声明了3个引用变量a, b, c,
通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。 |