抽象.多態總結

1、Java抽象類程序員

(一) 抽象類的相關概念編程

①若是一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類;架構

②用abstract修飾的類就是抽象類。若是某個類中包含有抽象方法,那麼該類就必須定義成抽象類。可是抽象類中不必定有抽象方法;函數

(二)抽象類的定義優化

[訪問權限] abstract class 類名 {spa

成員列表}設計

public abstract class Shapes {對象

public void draw(){繼承

         //具體代碼}}開發

(三)抽象類的相關概念

①用abstract修飾的類就是抽象類。若是某個類中包含有抽象方法,那麼該類就必須定義成抽象類

②抽象類能夠有成員屬性和非抽象的成員方法;

③抽象類不能被實例化,但能夠有構造函數;

④抽象類只能用做基類,表示的是一種繼承關係。繼承抽象類的非抽象類必須實現其中的全部抽象方法,而已實現方法的參數、返回值要和抽象類中的方法同樣。不然,該類也必須聲明爲抽象類;

(四)抽象類的注意事項

①抽象類能夠有構造方法,但不能直接實例化,只能用來繼承;

②抽象類的派生子類應該提供對其全部抽象方法的具體實現;若是抽象類的派生子類沒有實現其中的全部抽象方法,那麼該派生子類仍然是抽象類,只能用於繼承,而不能實例化;

③抽象類中也能夠包含有非抽象的方法,子類中重寫非抽象方法時返回值和參數必須與父類一致;

④構造方法和靜態方法不能夠修飾爲abstract;

2、Java抽象方法

(一)抽象方法的相關概念

①在某些狀況下,類沒法(或者沒有必要)提供方法的具體實現,能夠將此方法聲明成抽象方法;

②在類中沒有方法體的方法,就是抽象方法;

③含有抽象方法的類,必定是抽象類;

(二)抽象方法的語法

使用關鍵字abstract聲明抽象方法,通常語法。

public abstract void draw();

3、抽象的做用

①在面向對象領域,抽象類主要用來進行類型隱藏;也就是使用抽象的類型來編程,可是具體運行時就可使用具體類型;

②利用抽象的概念,可以在開發項目中建立擴展性很好的架構,優化程序;

③抽象類,抽象方法,在軟件開發過程當中都是設計層面的概念。也就是說,設計人員會設計出抽象類,抽象方法,程序員都是來繼承這些抽象類並覆蓋抽象方法,實現具體功能;

4、多態性

①多態性是面向對象的三大特徵之一;

②多態的含義是:對外一種表現形式,內在有多種具體實現;

③Java中多態的具體體現;

1.方法重載

2.方法覆蓋

3.多態參數(新內容,重點、難點)

5、運行期類型與編譯期類型

(一)第一種狀況

①第一種狀況:編譯期類型和運行期類型相同;

②聲明A的時候,使用到的類型A表示對象的類型,被稱爲編譯期類型,在編譯期,虛擬機認爲a的類型是A,對於a所使用的屬性和方法的有效性將到類A中去驗證;

③構造方法A()中的A是運行期類型,在運行期,將執行運行期類型中的方法;

(二)第二種狀況

①當有繼承關係時,可能發生編譯期類型和運行期類型不一樣的狀況,即編譯期類型是父類類型,運行期類型是子類類型;

②對象ab的編譯期類型爲父類A類,運行期類型爲子類B類;

③若是一個引用的編譯期類型和運行期類型不一樣,那麼必定是編譯期類型與運行期類型有父類子類關係;

④ab對象使用的方法,在編譯期到類A中去校驗,而運行則執行B類的方法;

⑤若是一個對象的編譯期類型是父類,運行期類型是子類,能夠對該對象進行強制類型轉換,將其編譯器類型轉換爲與運行期類型相同的類型,即:B b=(B)ab;

 

6、父類引用指向子類對象

①當編譯器類型是父類,運行期類型是子類時,被稱爲父類引用指向子類對象;

class  Animal{

               ……

}

class Cat  extends Animal{

               ……

}

class Dog extends Animal {

               ……

}

Cat m = new Cat()

Animal x = new Cat()  //Animal 的引用指向Cat的對象;

(二)多態環境下對屬性和方法的調用

①多態環境下對成員方法的調用

Animal x = new Cat()

   x.show() //調用的是子類中的方法;

編譯看左邊,運行看右邊

②多態環境下對靜態成員方法的調用

Animal x = new Cat()

   x.show() //調用的是動物類中的靜態成員方法;

編譯和運行都看左邊

(三)多態環境下對成員變量的調用

①Animal x = new Cat()

x.num; //調用的是動物類中的成員變量。

編譯和運行都看等號左邊。

注意:變量不存在被子類覆寫這一說法,只有方法存在覆寫。

7、多態參數

(一)方法參數具備多態性

class  Animal{

           void eat() {}}

class  Cat extends Animal{

            void eat() {}}

class Dog extends Animal{

            void eat(){}}

//方法的形式參數類型是父類類型,而傳遞的實際參數能夠是任意子類的對象

method(Animal  animal){  

     animal .eat();                }

方法參數多態性的好處:提升代碼的擴展性

  

8、多態環境下對象造型

(一)向上造型 –又稱自動類型提高

class Animal{

     abstract void eat();}

class Cat extends Animal{

      void look() {

System.out.println("看家"); } }      

 ………

   Animal x=new Cat()  //向上造型,Cat對象提高到Animal對象

   x.eat()   //只能使用父類中的方法

   x.look()  //報錯!不能使用子類中的方法

向上造型的做用是:提升程序的擴展性

(二)向下造型 –又稱向下轉型

class Animal{

     abstract void eat();

}

class Cat extendsAnimal{

      void look() {

System.out.println("看家");

    }

    }      

 ………

Animal x=new Cat()

Cat  m=(Cat)x;  //向下轉型

   m.eat() ;

   m.look();//子父類中的方法均可以使用

向下造型的做用是:爲了使用子類中的特有方法

9、instanceof 操做符

(一)instanceof 用法

①result = 對象名稱 instanceof  類型;

②參數:

result:布爾類型。

對象名稱:必選項,任意對象表達式。

類型:必選項,任意已定義的類,能夠是API中的類,能夠是自定義的類;

③說明:

若是對象是這個類型的一個實例,則 instanceof 運算符返回 true。若是對象不是指定類的一個實例,或者對象是 null,則返回 false;

instanceof 運算符是用來在運行時指出對象是不是特定類的一個實例

相關文章
相關標籤/搜索