一個抽象類要注意以下幾點:
(1)抽象類只能作爲其他類的基類,它不能直接被實例化,而且對抽象類不能使
用new操作符。抽象類如果含有抽象的變量或值,則它們要麼是null類型,要麼包含
了對非抽象類的實例的引用。
(2)抽象類允許包含抽象成員,但這不是必須的(可以允許一個抽象類中沒有任何抽象成員);抽象類中可以有非抽象方法。
(3)抽象類不能同時又是final的。如果試圖將-一個final類作爲其他類的基類,Java將提示“The class can be either abstract or final, not both"。理所當然,final 類不能同時又是抽象類,因爲抽象總是希望被繼承的。
(4)如果一個非抽象類從抽象類中派生,則其必須通過覆蓋來實現所有繼承而來的抽象成員。
(5)抽象類可以被抽象類所繼承,結果仍是抽象類。
(6)抽象類允許被聲明。
例子:
public abstract class Person { //建立一個抽象類Person
public abstract void SayHello(); //其中存在抽象方法SayHello
public void about(){ //以及一個非抽象方法
System.out.println("Abstract Demo");
}
}
class Student extends Person{ //建立實體類Student 繼承Person
@Override
public void SayHello() { //必須覆蓋抽象方法 SayHello
System.out.println("SayHello");
}
}
class Nurse extends Person{ //建立實體類Nurse 繼承Person
//沒有覆蓋抽象方法SayHello。所以這個類是錯誤的。
}
abstract class Pupil extends Person{ //建立抽象類Pupil 繼承Person
@Override
public void SayHello() { //可以覆蓋抽象方法 SayHello
System.out.println("SayHello");
}
}
abstract class Worker extends Person{ //Worker 繼承Person
//抽象類繼承抽象類,可以不覆蓋方法 SayHello。 所以這個類是正確的
}