JAVA抽象类、抽象方法
类的继承的作用主要在于可以扩充已有类的功能,子类继承后可以任意选择是否实现父类的方法,想实现就实现,不想实现就不实现。换句话说,父类无法对子类是否实现自己的某个方法做强制的约定。要想强制子类必须实现父类的某个方法,在设计时就需要考虑抽象类。
一、抽象类的定义
抽象类主要是对子类中覆写方法进行约定,在抽象类中可以定义一些抽象方法来实现这些约定。抽象方法是指abstract关键字定义且无方法体的方法。包含抽象方法的类就是抽象类,也必须用abstract修饰。抽象类及抽象方法,例子如下:
abstract class Demo {
private String type;
// 定义抽象方法
public abstract String test();
}
总的来说,抽象类只是比普通类增加了抽象方法以及对子类的强制性覆写抽象方法的要求,其他方面完全相同。
二、抽象类的使用
抽象类可以理解成“不完整的类”,抽象类不能像普通类那样直接使用,要是用抽象类要注意下面几点:
- 抽象类必须有子类,子类通过extends来继承抽象类;
- 抽象类的子类(不是抽象类)必须覆写抽象类中的全部抽象方法;
- 抽象类无法直接产生实例化对象,要想产生实例化对象,可以通过子类向上转型的方式完成。
三、抽象类要注意的几点
- 定义抽象类时不能使用final关键字,因为抽象类必须有子类;
- 抽象类中可以没有抽象方法,但是任然不能使用new来直接实例化;
- 抽象类中可以定义static方法,且同普通类一样,该static方法不受到抽象类对象的限制(static方法永远不受到实例化对象或结构的限制,永远可以通过类名进行调用)。
四、包含抽象方法的类就是抽象类吗?抽象类一定包含抽象方法吗?抽象类能不能有普通方法?能不能定义构造方法?
(1)包含抽象方法的类就是抽象类;
(2)抽象类可以没有抽象方法;但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。
(3)抽象类中可以有普通方法
(4)抽象类中可以定义构造方法,在抽象类中可以有构造方法,只是不能直接创建抽象类的实例对象。