java-多态中方法重载和方法重写

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.....

参考博客:http://blog.csdn.net/chenssy/article/details/12786385

你可能感兴趣的:(java-多态中方法重载和方法重写)