轨道
/
Java
Java
/
练习
/
遥控器比赛
遥控器比赛

遥控器比赛

学习练习

简介

接口

接口是一种类型,它包含的成员定义了一组相关的功能。它把类的使用与实现分离开来,从而允许存在多种不同的实现,或支持某些通用的行为,比如格式化、比较或转换。

接口的语法与类相似,区别在于方法只以签名出现,不提供方法体。

public interface Language {
    String getLanguageName();
    String speak();
}

public class ItalianTraveller implements Language, Cloneable {

    // from Language interface
    public String getLanguageName() {
        return "Italiano";
    }

    // from Language interface
    public String speak() {
        return "Ciao mondo";
    }

    // from Cloneable interface
    public Object clone() {
        ItalianTraveller it = new ItalianTraveller();
        return it;
    }
}

接口定义的所有操作都必须由实现它的类来实现。

接口通常包含实例方法。

除了上面演示的 Cloneable,Java 类库中还能找到另一个接口的例子:Comparable<T>。当集合中需要默认的泛型排序顺序时,就可以实现 Comparable<T> 接口。

说明

在本练习中,你将进一步处理遥控车相关的工作。

一款实验车已经研发出来,测试赛道需要改造,以便同时容纳量产车型和实验车型。 这两种车都已经造好,你需要想办法让它们在测试赛道上共存。

此外,量产车开始取得一些成绩。 车队老板希望通过公布量产车的排名来保持竞争氛围。

1. 实现接口

请向RemoteControlCar接口中添加两个方法:

  • drive(),不返回任何值,以及
  • getDistanceTravelled(),返回一个int。

然后让ProductionRemoteControlCar和ExperimentalRemoteControlCar实现RemoteControlCar接口。 这包括实现该接口要求的所有方法。

2. 驾驶

每次调用.drive()都应让车行驶一段距离:

  • ProductionRemoteControlCar行驶 10 个单位,
  • ExperimentalRemoteControlCar行驶 20 个单位。

.getDistanceTravelled()方法应返回该车自启用以来行驶的总单位数。

ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
        
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20

3. 比赛

实现TestTrack.race(RemoteControlCar car)方法,其中的car会执行drive()。

TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown

4. 让量产车可以排序

请在ProductionRemoteControlCar类中实现Comparable<T>接口。 赛车的默认排序顺序应为按胜利次数降序排列。

实现静态方法TestTrack.getRankedCars(),返回传入的赛车,并按胜利次数降序排列。

ProductionRemoteControlCar prc1 = new ProductionRemoteControlCar();
ProductionRemoteControlCar prc2 = new ProductionRemoteControlCar();
prc1.setNumberOfVictories(2);
prc2.setNumberOfVictories(3);
List<ProductionRemoteControlCar> unsortedCars = new ArrayList<>();
unsortedCars.add(prc1);
unsortedCars.add(prc2);
List<ProductionRemoteControlCar> rankings = TestTrack.getRankedCars(unsortedCars);
// => rankings.get(0) == prc2
// => rankings.get(1) == prc1
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Java Exercism

准备好开始 遥控器比赛 了吗?

注册 Exercism,借助 26 个概念158 个练习 和真人导师指导,学习并掌握 Java,全部免费。