学些Java的抽象类和抽象方法,书中介绍一个例子:
【问题描述】编写一个抽象父类SpeedMeter速度表,提供普通方法getSpeed()计算速度,给子类使用,但留给子类实现抽象方法getRadius(),且getSpeed()依赖getRadius();
书中抽象方法getRadius()没有入参,我想试下有入参的实现,由于初学,经过多次调试才调通,总结下经验。
【代码示例】
抽象父类SpeedMeter代码如下:
public abstract class SpeedMeter { /*成员变量*/ private double radius; private double turnRate; /*构造器*/ public SpeedMeter(double radius) { this.radius = radius; } /*setter/getter*/ public void setTurnRate(double turnRate) { this.turnRate = turnRate; } public double getTurnRate() { return turnRate; } public void setRadius(double radius) { this.radius = radius; } public double getRadius() { return radius; } /*抽象方法*/ public abstract double getRadius(double radius); /*普通方法*/ public double getSpeed() { return 2 * Math.PI * this.getRadius(this.getRadius()) * turnRate; } }
子类CarSpeedMeter汽车的速度表,实现了父类的getRadius方法,代码如下:
public class CarSpeedMeter extends SpeedMeter { public CarSpeedMeter(double radius) { super(radius); } @Override public double getRadius(double radius) { return 2 * radius; } public static void main(String[] args) { CarSpeedMeter cs = new CarSpeedMeter(19); cs.setTurnRate(1000); System.out.println("计算汽车每秒行驶距离是:" + cs.getSpeed()); } }【说明】【普通方法依赖抽象方法时,抽象方法有入参的实现方法】
一开始我对抽象父类SpeedMeter中普通方法getSpeed()中依赖的抽象方法getRadius的入参苦恼不已,不知道这里的入参该写什么,后来我的思路是:
因为抽象方法getRadius(double radius)中radius是局部变量,不能直接给普通方法getSpeed()使用,所以想可以通过抽象父类SpeedMeter的构造器传入radius的值,然后在普通方法getSpeed()中给抽象方法getRadius作为入参使用;
注意抽象父类SpeedMeter中有2个getRadius方法,但是必要的,完全不同的:
1个是没有入参的getRadius方法,作用是获取构造器入参值,对应成员变量radius的getter方法;
1个是抽象方法,需要子类实现,有入参radius的getRadius方法,实现中,被普通方法getSpeed()使用,入参值使用构造器传入的值;
本人初学者,肯定有说的不对的地方,希望大神们指教,有没有更好的实现方法。