引用对象到接口的用途是什么?

时间:2013-06-19 13:43:41

标签: java object interface

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

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);

}

2 个答案:

答案 0 :(得分:1)

可能是因为界面类似于契约,可以通过实现来填充。你不应该依赖于一个实现,因为它不断变化,而不是接口/契约。参考界面可以使您的实现更加健壮。

答案 1 :(得分:1)

有时,实例的实际类并不重要,只有它实现的接口。

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

例如,您有一个名为GeometricFigure

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

您在真实课程中使用此界面,例如CanvasCanvas列有GeometricFigure s。

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的实施方式,是方形,圆形还是其他什么。只有这个类可以返回名称 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;
    }
}