抽象方法和抽象类的规则如下:
1.抽象类必须使用 abstrac 符来修饰,抽象方法也必须使用 abtract 修饰符来修饰,抽象方法不能有方法体
2.抽象类不能被实例化, 无法使 new 关键字来调用抽象类的构造器创建抽象类的实例
3.抽象类可包含成员变量、方法(普通方法和抽象方法都可以)、构造器 ,初始化块(创建其子类的实例时被调用)、内部类(接口、枚举) 种5成分 ,抽象类的构造器不能用于创建实例 主要是用于被其子类调用。
4.含有象方法的类只能被定义成抽象类
5.final修饰的类不能被继承 ,final修饰的方法不能被重写,因此 final和abstract 永远不能同时使用
6.static和abstract 不能同时修饰某个方法,但它们可以同时修饰内部类
7.abstrac 方法不能定义为 privat 访问权限,即 private和abtract 不能同时修饰方法
模板模式案例
- 如果编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留给其子类实现,这就是一种模板模式,模板模式也是十分常见且简单的设计模式之一。
- 下面再介绍一个模板模式的范例,抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给其子类去实现,在这个范例的抽象父类中,父类的普通方法依赖于一个抽象方法,而抽象方法则推迟到子类中提供实现.
public abstract class SpeedMeter {
{
System.out.println("执行SpeedMeter初始化块");
}
//转速
private double turnRate;
//定义Shape的构造器 该构造器并不是用于创建 Shape 对象
public SpeedMeter() {
System.out.println("执行SpeedMeter构造器");
}
//计算周长抽象方法
public abstract double CalGirth();
public void setTurnRate(double turnRate) {
this.turnRate = turnRate;
}
//计算速度
public double getSpeed() {
return turnRate * CalGirth();
}
}
public class CarSpeedMeter extends SpeedMeter{
private double radius;
public CarSpeedMeter(double redius) {
this.radius = redius;
}
public double CalGirth() {
return 2 * Math.PI * radius;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
CarSpeedMeter csm = new CarSpeedMeter(0.34);
csm.setTurnRate(15);
System.out.println("speed=" + csm.getSpeed());
}
}
打印结果
执行SpeedMeter初始化块
执行SpeedMeter构造器
speed=32.04424506661589
网友评论