1.当子类重载父类的方法,父类不能引用该方法。只能引用自己的方法。
2.当子类重写父类的方法,父类引用指向子类对象时,调用的是子类里被重写的方法。
指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。
package com.duotai.homework3;
/*
* 子类
*/
public class RedWine extends Wine{
/*
* 子类重载父类的方法。父类中不存在此方法
*/
public void fun1(String str){
System.out.println("RedWine 的fun1....");
fun2();
}
/*
* 子类重写父类的方法
* 指向子类的父类引用调用fun2()方法时,必定是调用该方法
*/
public void fun2(){
System.out.println("RedWine的fun2....");
}
}
package com.duotai.homework3;
/*
* 父类
*/
public class Wine {
public void fun1(){
System.out.println("wine的fun1.....");
fun2();
}
public void fun2(){
System.out.println("wine的fun2.....");
}
}
package com.duotai.homework3;
public class WineTest {
public void print(Wine w){
w.fun1();
System.out.println("------------");
w.fun2();
}
public static void main(String[] args) {
Wine w = new RedWine();
WineTest wt = new WineTest();
wt.print(w);
System.out.println("************");
Wine w1 = new Wine();
w1.fun1();
}
}
运行结果:
wine的fun1.....
RedWine的fun2....
------------
RedWine的fun2....
************
wine的fun1.....
wine的fun2.....
网友评论