抽象方法和抽象类必须使用abstract定义,有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法。
抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。
public abstract void test();没有方法体,即后面的 {}
但public void test(){}是一个普通方法,后面有{},不能用abstract修饰。
当定义一个抽象类的时候,必须由子类提供实现(重写),而final的方法不能重写,所以final和abstract不能同时用
static和abstract并不是绝对互斥的,static和abstract不能同时修饰方法,但可以同时修饰内部类。
因为abstract必须被重写才有意义,所以不能和private一起用。
抽象类:
不能创建实例,只能被当作父类继承。
public abstract class SpeedMeter
{
// 转速
private double turnRate;
public SpeedMeter()
{
}
// 把返回车轮半径的方法定义成抽象方法
public abstract double getRadius();
public void setTurnRate(double turnRate)
{
this.turnRate = turnRate;
}
// 定义计算速度的通用算法
public double getSpeed()
{
// 速度等于 车轮半径 * 2 * PI * 转速
return java.lang.Math.PI * 2 * getRadius() * turnRate;
}
}
public class CarSpeedMeter extends SpeedMeter
{
public double getRadius()
{
return 0.28;
}
public static void main(String[] args)
{
CarSpeedMeter csm = new CarSpeedMeter();
csm.setTurnRate(15);
System.out.println(csm.getSpeed());
}
}