一个父类设计的非常抽象,而没有任何的实例,那这个类就叫做抽象类,抽象类由修饰符abstract修饰。
抽象类是没有实例的,所以抽象类是不能使用new操作符的,但抽象类可以当成一种数据类型,eg:
若父类A是抽象类,其子类是类B,则
A a = new A();是不合法的。
A[] a = new A[10];
a[0] = new B();是合法的。
若一个类中包含抽象方法,那这个类一定是抽象类;若一个类是抽象类,但这个类中不一定有抽象方法。
若一个父类不是抽象类,但它的子类也可以是抽象类,而且在子类中可以用abstract来覆盖父类中的实例方法,eg;
public class Test {
public void m1(){
}
}
abstract class M1 extends Test{
@Override
public abstract void m1();
}
public abstract class abstractTest {
public abstract void ab();
}
abstract class AB1 extends abstractTest{
}
abstract class AB2 extends AB1{
abstract void ab2();//可以在子类中继续添加抽象方法
}
class AB3 extends AB2{//若还有任意的抽象方法没有被实现,那这个类依然要定义为抽象类
@Override
public void ab() {
}
@Override
void ab2() {
}
}