【本節目标】
通過閱讀本節内容,你将對final、static關鍵字有更深的了解,并對使用抽象類的有關注意事項具備一定的認識。
抽象類的相關說明
抽象類是一個重要的面向對象設計的結構,對于抽象類使用的時候需要注意以下幾點問題:
- 在定義抽象類的時候絕對不能夠使用final關鍵字進行定義,因為抽象類必須有子類,而final定義的類是不能夠有子類的。
- 抽象類是作為一個普通類的加強版出現的(抽象類的組成就是在普通類的基礎上擴充而來的,隻是追加了抽象方法),既然是在普通類的基礎上擴充的,那麼普通類之中就可以定義屬性和方法,那麼這些屬性一定是要求進行記憶體空間開辟的,是以抽象類一定可以提供有構造方法,并且子類也一定會按照子類對象的執行個體化原則進行構造調用。
abstract class Message { //定義抽象類
private String type ; //消息類型
public Message (String type) { //類中沒有提供有無參構造
this.type = type ;
}
public abstract String getConnectInfo() ; //抽象方法
public void setType(String type) { //普通方法
this.type = type ;
}
public String getType() { //普通方法
return this.type ;
}
}
class DatabaseMessage extends Message { //類的繼承關系
public DatabaseMessage(String str) {
super(str) ;
}
public String getConnectInfo() { //方法覆寫
return “Oracle資料庫連接配接資訊。”
}
}
public class JavaDemo {
public static void main(String args[]) {
Message msg = new DatabaseMessage (“客戶消息”) ;
System.out.println(msg.getConnectInfo()) ;
System.out.println(msg.getType ()) ;
}
}
執行結果:
Oracle資料庫連接配接資訊。
客戶消息
- 抽象類中允許沒有抽象方法,但是即便沒有抽象方法,也無法直接使用關鍵字new直接執行個體化抽象對象。
abstract class Message { //定義抽象類
}
class DatabaseMessage extends Message { //類的繼承關系
}
public class JavaDemo {
public static void main(String args[]) {
Message msg = new Message () ;
}
}
錯誤:Message是抽象的;無法執行個體化
即便抽象類沒有執行個體化對象,那麼也無法直接使用關鍵字new擷取抽象類對象,必須依靠子類對象完成。
Message msg = new DatabaseMessage () ;
- 抽象類中可以提供有static方法,并且該方法不受到抽象類對象的局限。
abstract class Message { //定義抽象類
public abstract String getInfo() ; //抽象方法
public static Message getInstance() {
return new DatabaseMessage() ;
}
}
class DatabaseMessage extends Message { //類的繼承關系
public String getInfo() {
return “資料庫連接配接資訊。”
}
}
public class JavaDemo {
public static void main(String args[]) {
Message msg = Message.getInstance () ;
System.out.println(msg.getInfo()) ;
}
}
資料庫連接配接資訊。
static方法永遠不受到執行個體化對象或結構的限制,永遠可以直接通過類名稱進行調用。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:教你将好鋼用在刀刃上-應用抽象類 | 帶你學《Java面向對象程式設計》之五十四 更多Java面向對象程式設計文章檢視此處