JAVA语言中的抽象类(abstract)
1、定义
由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类。抽象的类无法进行实例化,因为他不是具体存在的类,或者说这样的类还不够完善,不能直接使用new关键字调用其构造器生成该类的对象。
格式 abstract class 类名
{
abstract int 方法名(int x,int y);
}
2、抽象方法
抽象的方法没有方法体。需要注意的是在抽象类中既可以有抽象方法,也可以有普通方法,注意抽象方法是没有方法体的(也就是方法后面是没有大括号的)。凡是继承这个抽象类的实体子类,都必须要实现这个抽象方法。
我们总结一下抽象类的特点:
(1)抽象类不能被实例化。
(2)构造方法 和 static 方法不能是抽象的。
(3)父类的抽象方法往往在子类中实现。
(4)抽象类可以具有指向子类对象的对象引用。
3、抽象类
(1)用abstract关键字来表达的类,其表达形式为:(public)abstract class 类名{}
(2)抽象类不能被实例化,也就是说我们没法直接new 一个抽象类。抽象类本身就代表了一个类型,无法确定为一个具体的对象,所以不能实例化就合乎情理了,只能有它的继承类实例化。
(3)抽象类虽然不能被实例化,但有自己的构造方法(这个后面再讨论)
(4)抽象类与接口(interface)有很大的不同之处,接口中不能有实例方法去实现业务逻辑,而抽象类
中可以有实例方法,并实现业务逻辑,比如我们可以在抽象类中创建和销毁一个线程池。
(5)抽象类不能使用final关键字修饰,因为final修饰的类是无法被继承,而对于抽象类来说就是
需要通过继承去实现抽象方法,这又会产生矛盾。
4、抽象类与抽象方法的关联
如果一个类中至少有一个抽象方法,那么这个类一定是抽象类,但反之则不然。也就是说一个抽象类中可以没有抽象方法。这样做的目的是为了此类不能被实例化。
如果一个类继承了一个抽象类,那么它必须全部覆写抽象类中的抽象方法,当然也可以不全部覆写,如果不覆写全部抽象方法则这个子类也必须是抽象类(这样做就无意义了)。