一:抽象的定义
- 当父类的某些方法不确定时,可以用abstract关键字来修饰该方法,即抽象方法,用abstract来修饰该类,即抽象类
- 抽象类将事物的共性的东西提取出来,由子类继承去实现,代码易扩展、易维护
二:抽象类和抽象方法的格式
- 抽象类的表达方式
//抽象类
abstract class 类名{
}
- 抽象方法的表达方式
//抽象方法,不能有方法主体
abstract 返回类型 方法名();
三:代码演示
父类:Vehicle
package chapter6;
public abstract class Vehicle {
public abstract void run();
public void stop(){
System.out.println("停在路上");
}
}
子类1:Bicycle,继承父类Vehicle
package chapter6;
public class Bicycle extends Vehicle{
@Override
public void run() {
System.out.println("Bicycle is running.人工驱动");
}
}
子类2:Automobile,继承父类Vehicle
package chapter6;
public class Automobile extends Vehicle{
@Override
public void run() {
System.out.println("Automobile is run ,汽油驱动");
}
}
运行类:AbstractDemo
package chapter6;
public class AbstractDemo {
public static void main(String[] args) {
Vehicle bike = new Bicycle();
bike.run();
bike.stop();
Vehicle automible = new Automobile();
automible.run();
automible.stop();
}
}
/**运行结果:
Bicycle is running.人工驱动
停在路上
Automobile is run ,汽油驱动
停在路上
*/
四:总结
-
抽象类的特点
- 抽象类不能被实例化,因为抽象类中方法未具体化,这是一种不完整的类,所以不能直接实例化,编译无法通过
- 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
- 如果一个抽象类中可以没有抽象方法,这样做的目的是为了此类不能被实例化。
- 抽象类的子类必须给出抽象类中的抽象方法的具体实现,否则子类也是抽象类,需要用abstract声明
- 抽象类不能使用final关键字修饰,因为final修饰的类是无法被继承
-
抽象方法的特点
- 抽象类中的抽象方法只是声明,不包含方法体
- 抽象方法不能用private修饰,因为抽象方法必须被子类实现(覆写),而private权限对于子类来说是不能访问的
- 一个类继承了一个抽象类,那么它必须全部覆写抽象类中的抽象方法当然也可以不全部覆写,如果不覆写全部抽象方法则这个子类也必须是抽象类
- 构造方法,类方法(即static 修饰的方法)不能声明为抽象方法