class A
{
void fun1()
{
System.out.println(fun2());
}
int fun2()
{
return 123;
}
}
public class B extends A
{
int fun2()
{
return 456;
}
public static void main(String args[])
{
B b = new B();
b.fun1(); //B类为A类的子类,继承了A类的fun1()方法,并复写了A类的fun2()方法
//b为B类的实例对象,b调用B类fun1()方法,fun1()方法又调用B类的fun2()方法,故输出“456”
A a = b; //A a = b,父类变量指向子类实例对象,此为多态
a.fun1(); //a.fun1(),在编译时期,编译器会检查A类中是否有fun1()方法,如果没有,则编译不会通过
//a虽然是A类引用变量,但指向的却是B类的实例对象b,所以在运行时
//仍然是调用的B类fun1()、fun2()方法,故输出“456”。最终结果为“456456”
}
}作者: 残影 时间: 2015-9-6 22:58
顶。。。 作者: 徐鹏辰 时间: 2015-9-6 23:13
挺详细的,赞!!作者: 头撞豆腐 时间: 2015-9-7 00:30
谢谢。。。