我正在尝试理解Java接口,就像全世界数以百万计的其他人一样。我如何测试我是否真的使用我的界面?如果我删除了TestBubbles类中的“implements”,我仍然会得到相同的结果。我可以更改任一方法定义并获得编译失败,但如何测试我传递的数据?
public interface Bubbles {
public void addAir(String bubbleType, float bubbleOne, float bubbleTwo );
}
public class TestBubbles implements Bubbles {
public static void main(String [] args){
String type = "wiggly";
float sizeOne = 42.01f;
float sizeTwo = 80.10f;
TestBubbles tb = new TestBubbles();
tb.addAir(type, sizeOne, sizeTwo);
}
public void addAir(String rType, float fOne, float fTwo ){
System.out.println(rType + " " + fOne + " " + fTwo);
}
}
答案 0 :(得分:1)
通常,您应该使用接口类型的变量来引用该对象。
e.g。
Bubbles tb = new TestBubbles(); //now it will not compile if you remove implements
不如下(否则创建界面没有意义)
TestBubbles tb = new TestBubbles();
答案 1 :(得分:1)
您测试了这一点,您应该通过使用接口类型而不是类的类型来定义变量来编写代码。
看看你的专栏:
TestBubbles tb = new TestBubbles();
tb.addAir(type, sizeOne, sizeTwo);
编程到应按如下方式编码的接口时:
Bubbles tb = new TestBubbles();
tb.addAir(type, sizeOne, sizeTwo);
这样你以后可以用SuperTrooperTestBubbles交换TestBubbles,它只通过改变一行代码来实现相同的接口,其余的将工作:
Bubbles tb = new SuperTrooperTestBubbles();
tb.addAir(type, sizeOne, sizeTwo);
哪里
public class SuperTrooperTestBubbles implements Bubbles { ....
答案 2 :(得分:0)
如果接口指定输入变量的任何约束,则由具体实现来检查它们。没有神奇的解决方案。
也就是说,您可以将方法标记为@Override
,如果不覆盖另一个方法,则会使其成为编译器错误,这对于这种情况很有用。我总是这样做。