Java抽象类中,普通方法依赖抽象方法时,抽象方法有入参的实现方法

学些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()使用,入参值使用构造器传入的值;


本人初学者,肯定有说的不对的地方,希望大神们指教,有没有更好的实现方法。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值