-
抽象類是不能被實例化的,
package com.learn; public abstract class AbstractPerson { public static void main(String[] args) { new AbstractPerson(); } } //Error: java: com.learn.AbstractPerson是抽象的; 無法實例化執行
-
抽象類構造函數的修飾符為
public
時//抽象類 package com.learn; public abstract class AbstractPerson { public AbstractPerson(){ System.out.println("AbstractPerson構造函數"); } } //抽象類的繼承類 package com.learn; public class Person extends AbstractPerson{ public Person(){ System.out.println("Person構造函數"); } public static void main(String[] args) { new Person(); } } //運行結果 AbstractPerson構造函數 Person構造函數
這說明抽象類可以有構造函數,只是不能被實例化。
-
抽象類構造函數的修飾符為
protected
時//抽象類 package com.learn; public abstract class AbstractPerson { //修改為protected protected AbstractPerson(){ System.out.println("AbstractPerson構造函數"); } } //運行結果 AbstractPerson構造函數 Person構造函數
結果和使用public時相同,說明這兩種修飾符並沒有區別。
-
思考
為什么jdk中都使用的是protected,而不使用public?
1) protected表示只能繼承的類可以使用,public表示所有類都可以使用。
2) 抽象類的構造函數只能被繼承類調用,這和protected的含義相同,因此用protected來修飾,但從編譯和運行的角度並沒有差別。