- 抽象類和普通類一樣,有構造函數。抽象類中有一些屬性,可以利用構造方法對屬性進行初始化。子類對象實例化的時候先執行抽象類的構造,再執行子類構造。
- 抽象類不能用final聲明。因為抽象類必須有子類繼承,所以抽象類不能使用final定義。
- 抽象類不能用static進行聲明,但是抽象類中的內部類可以使用static聲明。
abstract class A { static abstract class B { public abstract void print(); } } class X extends A.B { public void print() { System.out.println(this.getClass()); } } public class Hello { public static void main(String[] args) throws Exception { A.B ab = new X(); ab.print(); } }
輸出:class X
4.抽象類和普通類一樣,可以有static方法,且可以通過類名稱.方法名的方式進行調用
abstract class A { public static void test() { System.out.println("抽象類中的static方法"); } } public class Hello { public static void main(String[] args) throws Exception { A.test(); } }
5. 有些時候抽象類只需要一個特定的系統子類操作,可以對外部隱藏抽象類的實現。這樣的設計在系統類庫中比較常見,目的是為了隱藏我們不需要的子類實現。
abstract class A { public abstract void print(); private static class B extends A { public void print() { System.out.println("打印消息測試"); } } public static A getInstance() { return new B(); } } public class Hello { public static void main(String[] args) throws Exception { A a = A.getInstance(); a.print(); } }
6. 觀察下面的輸出。
abstract class A { public A() { this.print(); } public abstract void print(); } class B extends A { private int num = 100; public B(int num) { super(); this.num = num; } public void print() { System.out.println(this.num); } } public class Hello { public static void main(String[] args) throws Exception { B b = new B(30); } }
上面代碼輸出: 0