韓順平 java 第13講第14講 抽象類、接口、final

抽象類

爲什麼存在抽象類?

當父類的一些方法不能確定時,可以用abstract關鍵字來修飾該方法(也就是抽象方法),用abstract來修飾該類。
比如之前的Animal類,可以這麼定義:

abstract class Animal{
    String name;
    int age;
    abstract public void cry();
}

抽象類和抽象方法需要注意

  1. 當一個類繼承的父類是抽象類的話,需要我們把父類中的所有的抽象方法全部實現。
  2. 用abstract修飾的類是抽象類,修飾的方法是抽象方法。
  3. 抽象方法不能實現!!(就是不能帶{},因爲帶了{}之後,即使什麼不做也相當於是實現了!!)
  4. 抽象類不能被實例化。(你想想,你實例化了,抽象方法都不知道自己要幹什麼,矛盾了吧)
  5. 抽象類可以沒有抽象方法。但是有抽象方法的類必須是抽象類。
  6. 抽象方法不能有主體,也就是不能有“{ }”

接口

爲什麼有接口?

usb就是現實中的接口。
接口就是給出一些沒有內容的方法,封裝到一起,到某個類需要使用的時候,在根據具體情況把這些方法寫出來。

class 類名 implements 接口{
    方法;
    變量;
}

接口是更加抽象的抽象類,抽象類裏的非抽象方法可以有方法體。接口裏的所有方法都沒有方法體,接口體現了程序設計的多態和高內聚低耦合的設計思想。

interface Usb{
    int a = 1;
    public void start();
    public void stop();
}
class Camera implements Usb{
    public void start(){
        System.out.println("I am Camera! Working now~");
    }
    public void stop(){
        System.out.println("I am Camera! Stop now~");
    }
}
class Phone implements Usb{
    public void start(){
        System.out.println("I am phone! Working now~");
    }
    public void stop(){
        System.out.println("I am Phone! Stop now~");
    }
}
//電腦來使用usb
class Computer{
    public void useUsb(Usb usb){  //接口也體現了多態
        usb.start();
        usb.stop();
    }
}
  1. 實現接口的時候需要把接口中的所有方法都實現
  2. 接口不能被實例化(同抽象類)
  3. 接口中的所有方法都不能有主體,也就是不能帶大括號
  4. 一個類可以實現多個接口
  5. 接口中可以有變量,但變量不能用private 和 protected 修飾。接口中的變量,本質上都是public的、static的而且是final類型的(必須初始化),不管你加不加static修飾;在java開發中,我們經常把常用的變量定義在接口中,作爲全局變量使用,訪問形式:接口名.變量名(這點可以思考,正因爲接口不恩能夠被實例化,所以他的變量必須是靜態的,不然沒有存在的意義啊。而且,必須是piblic的,這就要求接口在所有地方實現的時候效果都一樣,不然,比如在其它包裏實現這個接口就少了些東西~~,那豈不是很蛋疼?那麼,final怎麼理解?其實,如果你能把接口裏的東西隨便亂改,那誰都不敢去實現接口了,因爲你不知道接口裏的變量是什麼……這就想通了吧~)
  6. 一個接口不能繼承其他的類(這個很明顯),但是可以繼承別的接口。

實現接口 VS 繼承類

選那個呢?
繼承只能單繼承,但是接口卻彌補了單繼承的這個缺陷。
java的單繼承機制可以保證類的純潔性,比c++中的多繼承機制簡潔。但是不可否認,這個對子類功能的擴展有一定影響。我們可以這麼看:
1. 實現接口可以看做是對繼承的一種補充。實現接口可以在不打破繼承關係的前提下,對某個類功能擴展,非常靈活。
2. 繼承是層級式的,不太靈活。如果多層繼承中,修改了上層類的某個方法,則其所有的子類都會隨之修改,比較恐怖。但是接口只針對實現該接口的類有影響。


final

  1. 可以修飾變量或者方法
  2. 當不需要父類的方法被子類覆蓋的時候,可以用final
  3. 當不需要類的某個變量名字被修改時候,可以用final,如果一個變量是final,必須初始化,以後不能修改。final修飾的也叫常量!一般用xx_xx_xx命名。
  4. 當不希望被繼承時,可以用final修飾類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章