什么是抽象
在 java 的编码当中,我们经常会遇到一些被 abstract 关键字修饰的类
public abstract class 类名{
// 省略内容
}
这样的一个类就是抽象类
为什么需要抽象
在 java 三大特性之继承(重写) 这一章中,我们以 Animal 为例,提到了子类对父类方法的重写。
从类的角度看,动物可以有很多物种,不能将其描述为“动物是猫”这样具体的一个类;但所有物种都可以将其描述为“猫是动物,狗是动物”这样一个具有概括性很较为抽象的类。所以在建立一个对象时,我们通常会建立一个具体的物种,而不是一个抽象的描述。
// 我们通常会去创建一个具体的类
Cat cat = new Cat();
Dog dog = new Dog();
// 而不会去创建一个抽象的描述
Animal animal = new Animal();
从方法的角度看,所有动物有“吃”这个动作,而每一种动物都一定具备这一种行为,且它们都有其不同的“吃”的方法和特点,如撕咬、舔舐、吸允等。那么对于动物这个父类而言,“吃”这个行为就没有去描述的必要,若继承给子类后,这些子类往往是用不上的,有时为了正确使用,不得不去重写它们,而如果忘记重写它们,在调用时,又会调用到这些不太有意义的方法。因此,改用抽象方法去描述,而子类必须对这个抽象方法进行重写,否则子类无法创建。
如何实现抽象类
1)定义抽象类
用 abstract 关键字修饰类名
public abstract class Animal{
// 省略内容
}
这样就定义了一个抽象类,抽象方法也是在这个基础上进行描述的
2)定义抽象类
同样,用 abstract 关键字来修饰方法名
public abstract class Animal{
public void eat();
}
与普通方法不同的是,抽象方法不需要用 {} ,因为它不需要具体内容来描述,留待子类来实现
3)如何实现抽象类
抽象类的实现要依赖子类
首先,我们创建一个 Animal 抽象类
如图,我们成功创建了一个抽象类,下面需要对其进行实现,即创建子类
抽象类的特点
- 抽象类和抽象方法都需要用 abstract 关键字修饰
- 抽象类中可以没有抽象方法,但抽象方法一定在抽象类当中
- 抽象类不能被直接创建对象(只有在创建子类的时候才会被创建)
- 抽象类有构造方法