2014-10-05 81 views
-1

我看到有人创建某个类的实例并将其分配给该类实现的类型接口的引用变量。java中的类型接口

interface A { 
    void display(); 
} 
public class InterfaceObject implements A { 
    public void display(){ 
    System.out.println("show this.."); 
    } 
    public static void main(String[] args) { 

    A aObj = new InterfaceObject(); 
    aObj.display();//OUTOUT:show this.. 

    InterfaceObject bObj = new InterfaceObject(); 
    bObj.display();//OUTOUT:show this.. 
} 
} 

这里对象aObj是一个接口对象,对象bObj是实现接口的类的直接实例。然而通过这两个对象调用display()会得到相同的结果。
问题:创建接口对象(接口类型的引用变量)的优点是什么?它只会增加更多的代码混淆?当然,情况并非如此。

+0

通常情况下,您可以创建'class OtherInterfaceObject implements A',它在调用display()时做了一些不同的事情。 – markspace 2014-10-05 02:10:16

+0

_创建接口对象的优点是什么?_您不能创建接口对象。您可以定义一个类型为接口的引用变量。 – Voicu 2014-10-05 02:13:38

+0

接口允许从继承和类层次结构中自由。使用它们。 – user2864740 2014-10-05 02:14:03

回答

0

接口(或抽象类型)的经典插图就是形状。假设您正在编写一个显示形状的程序 - 三角形,矩形,圆形等。所有这些程序都可以实现某些方法,使其可以在屏幕上显示 - 例如显示(屏幕)方法 - 以便每个形状都知道如何为自己做到这一点。

但是通过实现“形状”接口,并将对象视为形状,代码处理形状不必知道处理每种形状的方法,而只需了解那些通用于形状的方法。这是优势。程序的显示部分可以包含这些内容并且处理它们而不必知道它们的个别特征。

这种通用性适用于许多情况。

+0

一个形状可能是一个类,仍然显示上述示例 - 那么为什么要使用接口? – user2864740 2014-10-05 02:15:26

+1

Java没有多重继承,因此使Shape成为一个接口将实现类(Traiangle,Rectangle等)自由地扩展到另一个类,并且仍然实现Shape。如果Shape是一个类,那么实现类将不得不扩展Shape,并且不能扩展任何其他类。该接口也产生更松散的耦合 - 其他处理Shape实现的类不需要知道具体的实现类是什么。 – GreyBeardedGeek 2014-10-05 02:19:28

+0

好点@GreyBeardedGeek – user3366706 2014-10-05 03:21:14