当类实现这些接口时,可以在接口引用变量中分配任何对象

时间:2013-11-30 03:28:02

标签: java

当类实现这些接口时,可以在接口引用变量中分配任何对象。

public interface MyInterface {
}

public class Test implements MyInterface {
    public static void main(String[] args) {
        Test test = new Test();
        MyInterface myInterface = test;
    }

这条线的含义是什么?

MyInterface myInterface = test; 

3 个答案:

答案 0 :(得分:4)

Interface用作Type。这是使用Interface的优势之一。因此,我们可以使用Interface的Type变量,该变量可以引用implementsInterface的任何实现。

要了解的最佳示例是任何Collection接口。

List<String> list = new ArrayList<String>();

在上面的例子中,List是变量指向ArrayList的接口,它实现了List interface。如果您希望将ArrayList更改为LinkedList,则必须只将ArrayList中的一个词更改为LinkedList。所以它看起来像

List<String> list = new LinkedList<String>();

另一个好处是松散耦合

答案 1 :(得分:2)

变量有两种类型:声明(或静态)类型和运行时类型。

变量

Test test = new Test();

声明为类型Test,它引用的对象的运行时类型为Test

此变量

MyInterface myInterface = test;

声明为类型MyInterface,它引用的对象的类型为Test

当您将对它的引用赋予某个超类型的变量时,该对象实际上没有发生任何事情。您只能在变量上调用对该声明类型可见的方法。


让我们试着画出来

   Reference               Object                     Reference
    (Test)                 (Test)                   (MyInterface)
     test  -----------> actual object  <-----------  myInterface     

答案 2 :(得分:0)

引用测试类对象的参考测试被分配给已实现的接口MyInterface