1. 程式人生 > >小白學JAVA,與你們感同身受,JAVA---day5:關於多型的理解和分析。魯迅的一句話:總之歲月漫長,然而值得等待。

小白學JAVA,與你們感同身受,JAVA---day5:關於多型的理解和分析。魯迅的一句話:總之歲月漫長,然而值得等待。

魯迅的一句話:總之歲月漫長,然而值得等待。

至於是不是他說的,就看大家的了。

 

/*
多型:事物存在的多種形態。
多型的前提:
1.要有繼承關係。
2.要有方法的重寫。
3.要有父類引用指向子類物件。


向上轉型和向下轉型:
1.父類引用指向子類物件    向上轉型。由小變大
2.向下轉型。由大變小,要用到強制型別轉換。
3.一定要先有向上轉型再有向下轉型。

多型的好處和弊端:
好處:
1.提高了程式碼的可維護性(繼承保證)和擴充套件性(多型保證)。
弊端:不能使用子類特有的屬性和行為。

作為引數時,用到instanceof關鍵字來判斷前邊的引用是否是後面的資料型別。      


抽象類:abstract關鍵字
abstract class{}
public abstract void eat();
抽象類中不一定有抽象方法,有抽象方法的類一定是抽象類或介面。
抽象類是不能例項化的,要有具體的子類例項化按照多型的方式。


抽象類:
1.成員變數:既可以是變數,也可以是常量。abstract不能修飾成員變數。
2.成員方法:可以是抽象,也可以是非抽象。
3.構造方法:有。
成員方法的特點:
抽象方法是強制子類要做的方法。
非抽象方法是子類繼承的,提高了程式碼的複用性。    


 */

abstract class Animal{
    public abstract void eat();
}
class Cat extends Animal{
    
    public void eat(){
        System.out.println("吃飯");
    }
}

class day5{
    public static void main(String[] args) {
        /*
        Father f=new Son();              //父類引用指向子類物件    向上轉型。由小變大
        
        System.out.println(f.num);       //對於成員變數,編譯看左邊(父類),執行看左邊(父類)。
        f.print();                         //對於成員方法,編譯看左邊(父類),執行看右邊(子類)。   動態繫結。  
        f.aim();                         //對於靜態方法,編譯看左邊(父類),執行看左邊(父類)。        
        System.out.println(new Son().num);*/
        /*
        Son s=(Son)f;                      //向下轉型。由大變小,要用到強制型別轉換。
        s.print();                      
        Animal a=new Cat();
        a.eat();
       
        if(a instanceof Cat){
            Dog c=(Dog)a;                    //ClassCastException: Cat cannot be cast to Dog  
            c.eat();
        }           
        else a.eat();  */
        Cat c=new Cat();
        c.eat();
    }
}
/*
class Animal{
    public void eat(){
        System.out.println("動物吃飯");
    }
}
class Cat extends Animal{
    public void eat(){
        System.out.println("貓吃魚");
    }
}
class Dog extends Animal{
    public void eat(){
        System.out.println("狗吃水");
    }
}
class Father{
    int num =10;
    public void print(){
        System.out.println("父類");
    }
        static void aim(){
        System.out.println("父類靜態執行");
    }
}
class Son extends Father{
    int num=20;
    public void print(){
        System.out.println("子類");
    }
        static void aim(){
        System.out.println("子類靜態執行");
    }
}*/