首页 > 代码库 > 抽象 & abstract关键字

抽象 & abstract关键字

抽象类
抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类
随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫抽象类。

个人理解:子类变得越来越多,涵盖范围越来越广,以至于囊括几乎所有情形,父类变得更多是一种“形式”,甚至变得无用。比如“人”作为父类,而当子类涵盖几乎所有类型的“人”后,父类“人”就变得抽象。

1.抽象类不能被实例化
2.但是抽象类有构造器(否则子类怎么调用super()呢)且可以正常定义        “凡是类,一定有构造器”
3.抽象方法所在的类一定是抽象类,但抽象类中可以有非抽象方法
4.如果抽象类的子类没有把该抽象类的所有方法重写(相当于该子类还有抽象方法),那么此子类须是抽象的(参见第3点),但如果把抽象父类的方法全部重写了,那么此子类可以是非抽象的并被实例化(注意,这里的“所有方法”指的是所有的父类的抽象方法)

一旦类被定义成abstract的之后,此类中的方法没有了实际作用,但是方法声明还是要保留(因为子类要重写/实现,或者在使用多态性时让编译通过):
抽象方法
1.格式:没有方法体和大括号,如
  1. public abstract void eat();
2.抽象方法只保留作为一个方法的功能而存在,具体执行的操作交由子类完成(实现

abstract

使用限制:不能与private(私有方法不能被重写,详见方法的重写)、final、static共用,不能修饰属性、构造器。

抽象 & abstract关键字