我正试图掌握接口及其在Java中的实现。
我有一个接口和3个类,其中2个实现了接口。接口的实现需要2个方法,
toString()
[这里使用@Overide
表示Netbeans满意度] 和 wheelCount()
。
public interface IVehicle {
@覆盖
public String toString();
public int wheelCount();
}
然后我们有两个类Bike和Car。
public class Bike implements IVehicle{
@Override
public int wheelCount() {
return 2;
}
@Override
public String toString(){
String s = "This is a Bike with " + wheelCount() + " wheels!";
return s;
}
}
public class Car implements IVehicle{
@Override
public int wheelCount() {
return 4;
}
@Override
public String toString(){
String s = "This is a Car with " + wheelCount() + " wheels!";
return s;
}
}
其他一些名为myClass
的课程包含一种打印出来的方法...... printStuf()
public void prntStuf(IVehicle myVehicle){
String s = myVehicle.toString();
System.out.println(s);
}
假设创建了myClass
的实例,如果代码中的某处创建了Bike()
和Car()
的实例,我们将这些对象传递给方法prntStuf
,使用这些任务中的任何一项会有什么好处。
IVehicle x =新车()
IVehicle modeoftransport1 = new Car();
IVehicle modeoftransport2 = new Bike();
与...相反...车x =新车()
Car modeoftransport1 = new Car();
Bike modeoftransport2 = new Bike();
是否存在实际的差异或好处,还是归结为编码惯例?
据我所知,它们都具有相同的效果,因为它们都产生相同的结果。我已经在这里查看过以前的问题,并在网上搜索但不能把手指放在上面。希望这是有道理的。
答案 0 :(得分:2)
在您的示例中,变量的类型无关紧要。
类型的选择实际上是关于稍后你将如何处理变量的选择。当你说:
Car modeoftransport1 = new Car();
你说的是“我将以一种重要的方式处理一辆新车,这是一辆汽车”;例如,如果Car有其他一些特定于Car的方法,那么你可能会打电话给那些。当你说:
IVehicle modeoftransport1 = new Car();
你说的是“我将以一种与哪种车辆无关的方式处理一辆新车”。
所以,是的,编码约定或编码风格,在很大程度上。
答案 1 :(得分:0)
在这种情况下,他们是一样的。如果您在任一派生类中具有特定功能,则需要使用后者,如果您希望稍后在处理范围内进行处理时调用该功能(不进行强制转换)。
答案 2 :(得分:-1)
这些陈述无关紧要,被认为是使用后者的不良做法。