1 概念
父类中的方法,被它的子类们重写, 某种情况下,父类只能知道子类应该具备一个怎样的方法,但是不能够明确知道如何实现该方法。只能在子类中才能确定如何去实现方法体。例如:。 比如学校又新产生了新专业学生,那么专科生直接继承学生,然后对自己特有的属性和方法进行补充即可。这样对于代码的重用也是很好的体现。
我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法 的类就是抽象类。
2 语法结构
2.1 抽象类
包含抽象方法的类。如果一个类包含抽象方法,那么该类必须是抽象类,使用 abstract 关键字修饰。
public abstract class 类名 {
//抽象类中可以包含变量、常量,抽象方法,非抽象方法
}
2.2抽象方法
只有方法的声明,没有方法体,即没有{},以分号 ; 结尾,使用 abstract 关键字修饰:
//抽象方法
修饰符 abstract 返回值类型 方法名(参数列表);
public abstract void run();
//非抽象方法
public abstract void run(){}
3 抽象类和抽象方法的使用
编写父类
//父类 包含抽象方法的类是抽象类
public abstract class Animal {
private String name;
//抽象方法
public abstract void run();
}
编写子类
public class Cat extends Animal {
//必须重写父类的抽象方法
@Override
public void run() {
}
}
编写测试类
public class TestDemo {
public static void main(String[] args) {
Animal a = new Animal();//不能实例化对象
Cat cat = new Cat();//只能通过子类实例化
}
}
4 注意事项
1 抽象类不能实例化,不能直接创建对象。抽象类是用来被继承的,继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类,使用 abstract 关键字修饰。
2 抽象类也是类,因此原来类中可以有的成员,抽象类都可以有,那么抽象类不能直接创建对象,为什么还有构造器呢?供子类调用,子类创建对象时,需要为从父类继承的属性初始化。
3 抽象类不能使用final修饰。
4 抽象方法是不能私有的private修饰