抽象方法只有方法签名,没有方法实现的方法。
1. 抽象方法和抽象类
抽象方法和抽象类必须使用 abstract 修饰符来定义
有抽象方法的类只能被定义成抽象类
抽象类里面可以没有抽象方法
- 抽象类必须使用abstract 修饰符来修饰,抽象方法也必须使用abstract 修饰符来修饰,抽象方法不能有方法体
- 抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。即使抽象类里不包含抽象方法,这个抽象类也不能创建实例。
- 抽象类可以包含成员变量、方法(普通方法和抽象方法都可以) 、构造器、初始化块、内部类(接口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被子类调用
- 含有抽象方法的类(包括直接定义了一个抽象方法;或继承了一个抽象父类,但没有完全实现父类包含的抽象方法;或实现了一个接口,但没有完全实现接口包含的抽象方法三种情况)只能被定义成抽象类。
注: 1. 抽象类可以包含抽象方法
2. 抽象类不能用于创建实例
当使用abstract 修饰类时,表明这个类只能被继承;
当abstract 修饰方法时,表明这个方法必须由子类提供实现(即重写)。
public abstract class SpeedMeter
{
// 转速
private double turnRate;
public SpeedMeter(){};
// 把计算车轮周长的方法定义成抽象方法
public abstract double calGirth();
public void setTurnRate(double turnRate)
{
this.turnRate = turnRate;
}
// 定义计算速度的通用算法
public double getSpeed()
{
// 速度等于 周长*转速
return calGirth() * turnRate;
}
}
public class CarSpeedMeter extends SpeedMeter
{
private double radius;
public CarSpeedMeter(double radius)
{
this.radius = radius;
}
public double calGirth()
{
return radius * 2 *Math.PI;
}
public static void main(String[] args)
{
var csm = new CarSpeedMeter(0.34);
csm.setTurnRate(15);
System.out.println(csm.getsSpeed());
}
}