本帖最后由 王广丛 于 2012-6-15 21:52 编辑
首先看这么一个例子:
class Animal
{ int num=1;
public void method1()
{
System.out.println(1);
}
public void method2()
{
System.out.println(2);
}
}
class Cat extends Animal
{ int num=2;
public void method1()
{
System.out.println(11);
}
public void method3()
{
System.out.println(3);
}
public static void method4()
{
System.out.println(3);
}
}
class Demo
{
public static void main(String[] args)
{
Animal a=new Cat();
System.out.println(f.num);
Cat c=new Cat();
System.out.println(c.num);
a.method1();
a.method2();
a.method3();//编辑不能通过
((Cat)a).method3();//只有强制类型转换后才能编译通过
c.method4();
}
}
运行之后可以得出结论:
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过;否则编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结一下:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。
在多态中,静态成员变量的特点:
无论编译和运行,都参考左边。 |