【问题标题】:what is use of referring object to an interface? [duplicate]将对象引用到接口有什么用? [复制]
【发布时间】:2013-06-19 13:43:40
【问题描述】:

我已经搜索了很多但没有得到这个问题的确切答案希望我能从这里得到它。 将类的对象引用到接口而不是引用同一个类到底有什么用??

void foo(list l){}

public static void main(String a[]){
List l = new ArrayList(); // why use this?
ArrayList a = new ArrayList(); //instead of this?
foo(l);
foo(a);

}

【问题讨论】:

标签: java object interface


【解决方案1】:

也许是因为接口类似于合约,可以通过实现来完成。你不应该依赖一个实现,因为它会不断变化,而不是接口/合同不应该。引用接口会使您的实现更加健壮。

【讨论】:

  • 而此时我正在导出一个 OSGI 服务,接口而不是实现......
【解决方案2】:

有时,实例的实际类无关紧要,重要的是它实现的接口。

另外,有时在编译时不可能知道实例的实际类,但我们只知道该类将实现的接口。

例如,您有一个名为GeometricFigure的接口

public static interface GeometricFigure {
    public Double getGirth();
    public String getName();
}

你在一个真实的类中使用这个接口,例如CanvasCanvas 有一个GeometricFigures 的列表。

public class Canvas {
    private List<GeometricFigure> figures;

    public void printAllFigures() {
         for (GeometricFigure figure : figures) {
              System.out.println(figure.getName() + " " + figure.getGirth());
         }
    }
}

现在,您的 Canvas独立于GeometricFigure 的实际实现。 Canvas 不在乎你是如何实现的 GeometricFigure,是正方形、圆形还是其他。只是这个类可以返回一个 name 和一个 girth 以便它可以打印它们。所以,实际的实现可以是SquareCircleTriangle等。唯一重要的是这些future类实现了GemometricFigure接口。

例如:

public class Square implements GeometricFigure {

    private String name;
    private Double sideLength; 

    public Square(String name, Double sideLength) {
        this.name = name;
        this.sideLength = sideLength;
    }        

    @Override
    public Double getGirth() {
        return 4 * sideLength;
    }

    @Override
    public String getName() {
        return name;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 2015-11-24
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2010-11-13
    • 2013-02-17
    相关资源
    最近更新 更多