抽象類前使用abstract關鍵字修飾,則該類為抽象類
應用場景
在某些情況下,某個父類只是知道其子類應該包含怎樣的方法,但無法準確的知道這些子類如何實現這些方法。
從多個具有相同特徵的類中抽象出乙個抽象類,以這個抽象類作為子類的模板,從而避免了子類設計的隨意性
作用
限制規定子類必須實現某些方法,但不關注實現細節
規則
1.含有抽象方法的類,一定是抽象類; 抽象類中可以宣告成員變數、常量、成員方法、抽象方法,抽象類中不一定要有抽象方法; 抽象類不能被例項化;
2.抽象類可以被繼承;
3. 可以通過兩種方式獲得抽象類物件:父類引用指向子類物件、匿名內部類;
4.子類必須重寫抽象父類的所有抽象方法,或者是把子類也定義為抽象類;
5.如果乙個類繼承的抽象父類還有上級抽象父類,那麼子類中需要要重寫所有抽象父類的所有抽象方法;
6. 抽象類也可以繼承非抽象類,同時繼承了父類的所有非私有的屬性和方法;
//定義乙個抽象類
public abstract class animal
public class dog extends animal
@override
public void sleep()
}
public class cat extends animal
@override
public void sleep()
}
public class initail
}
對於抽象類的一些簡單認知:
什麼時候使用抽象類和抽象方法,例如你定義了乙個動物類,這個動物類有吃飯和睡覺的方法,但其他具體的動物比如貓狗豬這些動物繼承動物類,它們同時也繼承了動物類吃飯睡覺的方法,但每個動物的吃飯和睡覺的方式都不同,他們都要進行對其父類方法進行重寫,那麼父類的方法就要定義為抽象方法,有抽象方法的就要是抽象類,那有些人就會問,我們不把父類的方法定義為抽象方法,只對其進行重寫不也一樣嗎?答案是的,你使用抽象類可以提高**的維護性,你只需要在抽象父類定義每個子類都會用到的抽象方法,那麼在子類繼承父類的時候,子類重寫父類的抽象方法,方法的具體實現都在子類中進行完成,減少**量。
package com.company.test0507;
public class phone
public void song()
}
package com.company.test0507;
public inte***ce listensong
package com.company.test0507;
public class newphone extends phone implements listensong
}
package com.company.test0507;
public class mp4 implements listensong
}
package com.company.test0507;
public class until
}
可以使用介面去描述連個不同型別的類具有的相同的特徵。
介面的另一種實現
與匿名類的結合:
語法的格式:
第一種:
介面名 i=new 介面名()
};//注意分號結尾
第二種:
new 介面名()
}.method();
介面是一種特殊的抽象類,抽象類描述的是類的本質,介面描述的是不同型別的類的共有特徵,抽象類解決了子類繼承父類的隨意性,介面解決了單繼承的問題。
抽象類和介面區別
含有abstract修飾符的class即為抽象類,abstract類不能建立的例項物件。含有abstract方法的類必須定義為abstract class,abstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體 concrete 子類中實現,所以,...
抽象類和介面區別
在開發人員崗位面試時,是否了解抽象類和介面之間的基本區別是乙個很重要的考量因素。完全不是。筆者面試過很多人,通常問的第乙個問題是關於介面和抽象類的區別。但實際上很少有程式設計師能給出正確的答案。就這個問題來說,初級程式設計師可能都會清楚之間的區別,可能也並不一定理解其背後的原因,但其結構上的差異,特...
抽象類與介面區別
抽象類 抽象類無法例項化 即不能new 使用抽象方法,該方法是只需宣告不需要實現。抽象方法需要定義在抽象類中,乙個類包含抽象方法,這個類一定是抽象類。如果某個類是抽象類,他可以有具體方法 有宣告,有實現 也可以有抽象方法。子類繼承父類 該父類為抽象類 就要實現該父類的所定義的所有抽象方法,否則該子類...