黑馬程序員_Java基礎[16]_多態2

---------- android培訓 java培訓 、期待與您交流! ----------
 * 【多態】

 * 5、多態的應用
 *
 * 基礎班學生:
 * 學習、睡覺
 * 高級班學生:
 * 學習、睡覺
 *
 * 可以將這兩類事物進行抽取。
 *
 * 把事物不斷抽象,找出的共性
 *
 * 對類型進行抽取,導致多態的產生,操作同一個大類型,對大類型中所有的小類型都能進行操作
 * 就因爲這個思想,才提高了擴展性的思想

 *
 */
abstract class Stu{
    
    public abstract void study();
    public void sleep(){
        System.out.println(" tang sleep");
    }
}

class BaseStu extends Stu{
    public void study(){
        System.out.println(" base");
    }
    public void sleep(){
        System.out.println(" base sleep");
    }
    
}

class advStu extends Stu{
    public void study(){
        System.out.println(" adv");
    }
    public void sleep(){
        System.out.println(" adv sleep");
    }
}
class DoStu{
    public void doSome(Stu stu){
        stu.study();
        stu.sleep();
    }
}





public class Demo_Duotai3 {
    public static void main(String []args){
        DoStu ds=new DoStu();
        
        ds.doSome(new BaseStu());
        ds.doSome(new advStu());
        
        
    }
    
}
---------------------------------------------------------------------------------------------------------------------------
/*【多態】【有狀態的時候返回看看第8天第4個視頻。】
 * 6、多態出現在代碼中的特點(多態使用的注意事項)
 */

class Fu1{
    void method1(){
        System.out.println("FU-1");
    }
    void method2(){
        System.out.println("FU-2");
    }
}

class Zi1 extends Fu1{
    void method1(){
        System.out.println("-1");
    }
    void method3(){
        System.out.println("-3");
    }
}



public class Demo_Duotai4 {
    public static void main(String []args){
        Fu1 f=new Zi1();
        f.method1();
        f.method2();
        //f.method3();   子類特有的方法,所以編譯失敗。f所屬類型Fu1中沒有3這個方法
        
        /*
         * 在多態【非靜態】成員函數的特點
         * 在編譯時期參閱引用類型變量所屬的類型中是否有調用方法
         *                 如果有便通過,沒有則編譯失敗

         * 在運行時期參閱對象所屬的類中是否有調用方法。
         *
         * 【簡單一點】就是:成員函數在多態調用時,編譯看左邊,運行看右邊。
         *
         * 非靜態有重寫的特性
         * 上面很常見。


         * 下面兩種情況很少見。
         * 設計到面試的環節:
         * 在多態中,成員變量的特點,無論編譯和運行,都參考左邊(引用性變量所屬的類 )。
         *
         * 在多態中,靜態函數的特點,無論編譯和運行都看左邊。

        在簡單一點來說就是,非靜態,左編右運,靜態是編運看左
         *
         */
        
        
        /*
        Zi1 z=new Zi1();
        z.method1();
        z.method2();
        z.method3();
        */
        
    }
}


【應用】
/*
 * 多態小應用
 * 需求:
 * 電腦運行示例
 * 電腦運行基於主板。
 */


interface PCI{
    public void open();
    public void close();

}
class MainBoard{
    public void run(){
        System.out.println("MainBoard");
    }
    public  void usePCI(PCI p){// PCI p=NetCard()//接口型引用指向自己的子類對象。
        if(p!=null){
            p.open();
            p.close();
        }
        
    }
}
class NetCard implements PCI{

    public void open(){
        System.out.println("open");
    }
    public void close(){
        System.out.println("close");
    }

    
}



public class Demo_Duotai5 {

    
    public static void main(String[] args) {
        MainBoard mb=new MainBoard();
        mb.run();
        mb.usePCI(null);
        mb.usePCI(new NetCard());

    }

}




---------- android培訓、 java培訓 、期待與您交流!----------
黑馬官網: http://edu.csdn.net/heima
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章