使用Implementation实现对象分配

时间:2011-10-10 18:11:00

标签: java

我正试图掌握接口及其在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();

是否存在实际的差异或好处,还是归结为编码惯例?

据我所知,它们都具有相同的效果,因为它们都产生相同的结果。我已经在这里查看过以前的问题,并在网上搜索但不能把手指放在上面。希望这是有道理的。

3 个答案:

答案 0 :(得分:2)

在您的示例中,变量的类型无关紧要。

类型的选择实际上是关于稍后你将如何处理变量的选择。当你说:

Car modeoftransport1 = new Car();

你说的是“我将以一种重要的方式处理一辆新车,这是一辆汽车”;例如,如果Car有其他一些特定于Car的方法,那么你可能会打电话给那些。当你说:

IVehicle modeoftransport1 = new Car();

你说的是“我将以一种与哪种车辆无关的方式处理一辆新车”。

所以,是的,编码约定或编码风格,在很大程度上。

答案 1 :(得分:0)

在这种情况下,他们是一样的。如果您在任一派生类中具有特定功能,则需要使用后者,如果您希望稍后在处理范围内进行处理时调用该功能(不进行强制转换)。

答案 2 :(得分:-1)

这些陈述无关紧要,被认为是使用后者的不良做法。