1. 程式人生 > >java為什麼要用abstract與Interface?

java為什麼要用abstract與Interface?

八.抽象類
有些類的例項不存在,但他代表一類不同物件的集合。如Animal類,沒有動物叫Animal,但Animal尤其子類Dog,Cat等等。
抽象除了被繼承外,沒有值和用途
抽象的方法:抽象類中的某些行為在沒有特定執行時沒有任何意義,沒有任何通用的實現是可行的。抽象的方法必須在抽象的類中定義。
就算無法實現方法的內容,但是可以定義出一組子類共同的協議。為了標記多型而存在。
子類必須要實現抽象類的所有抽象方法
Objectlei為所有型別的父類
編譯器是通過引用型別來確認有哪些方法可以呼叫,而不是Object 的真正型別

Object o=dogs.get
(index); o.bark();//不允許 o.hashCode();//Object原本的方法,可以

每個物件除了真正的型別外,還可以被當作Object型別來處理
型別轉換:

if(b instanceof Dog)
    Dog a=(Dog)b;

九.介面

寵物需要實現pet()方法,但獅子老虎不需要,而他們共同繼承Animal 類:
1.用繼承:有些方法父類有,但子類不需要有,如果繼承就不符合了。有些動物沒有寵物的行為…
2.用抽象:無論需不需要,所有子類必須覆蓋抽象方法,浪費時間,難以複用
3.把方法加到需要的地方:多型不起作用,無法確定同一類方法是bePlet()還是doPlet(),需要針對個別類進行特殊設計
4.java不支援多重繼承

解決方法:介面,介面所有的方法都是抽象的

大部分良好的設計不需要在抽先層面實現所有細節,我們需要的只是一個共同的合約,讓子類去實現細節也是很好的。
允許不同繼承樹的類實現相同介面