一个抽象类要注意以下几点:
(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。 所以这个类是正确的
}