当类实现这些接口时,可以在接口引用变量中分配任何对象。
public interface MyInterface {
}
public class Test implements MyInterface {
public static void main(String[] args) {
Test test = new Test();
MyInterface myInterface = test;
}
这条线的含义是什么?
MyInterface myInterface = test;
答案 0 :(得分:4)
Interface
用作Type
。这是使用Interface
的优势之一。因此,我们可以使用Interface
的Type变量,该变量可以引用implements
此Interface
的任何实现。
要了解的最佳示例是任何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