關于抽象類和接口的理解:
抽象類建議這樣來理解好一點:抽象者,不確定也
就是原本是一個普通的類,但是由于有了一個抽象方法,所以這個類就必須成為一個抽象類.
為什么啦!
因為定義成抽象類,就不允許直接實例化了. 想想也是顯然的,因為有一個方法是抽象方法,都沒有實現,
實例化成對象了,然后對象調用這個方法不久瓜了么?
這就好比車子還沒有安上方向盤,如果要開的話,就沒辦法控制方向了.
抽象類使用的場合:
類的部分方法是確定的,而另外部分方法是不確定的,只有通過繼承的子類去確定這部分方法,
但是子類可以使用抽象類的確定的方法(重用).
這兒需要注意一點:就是不要去Override 父類的非抽象方法,那寫方法是給你重用的,不是給你置換的.
原則:繼承應當用來擴展超類的功能,而不是置換或者撤銷超類的功能
比如說,你有一個貓,然后你把狗繼承自貓,但是貓可以爬樹,狗不能.就只有把那個爬樹的功能撤銷了.想想這是多么荒唐的事情啊!!
那么何為接口啦:
就是說有一個類,所有的方法都是不確定的.
比如說 平面形狀,總歸有獲取設置邊長,面積這些方法吧,但是怎么去實現是不確定的.
好像 形狀這玩意兒 的確找不到能確定的方法.那么就可以定義成一個接口.
接口允許有 public static final 的屬性, 但是不推薦這樣用,這是一種錯誤的用法.
可以認為接口就是一個特殊的 抽象類(所有的方法都是不確定的)
然后接口有一個好處,就是可多繼承.
舉一個例子,說明抽象類和接口一起用的地方
比如說,門這個類有Opern和Close兩個方法,但是有一種特殊的門需要一個報警的功能,
但是報警不是門的特征,是報警器的特征,故可以把報警設置為一個接口
那么報警的門就從門這個抽象類和報警接口繼承