与java中的接口混淆

时间:2016-03-30 13:28:54

标签: java interface

假设我有一个主类在其自身内声明一个接口,并且我有两个不同的类(在主类外声明)来实现接口。这是我的意思的一个例子

class ClassMain{

        interface InFace{
            void implementMethod();
        }

        InFace inFace;

        public someMethod(){
            inFace.implementMethod();
        }
    }

    //class A implements InFace

    class A implements InFace{
        void implementMethod(){
            doSomeOneThing;
        }
    }


    //class B implents InFace

    class B implements InFace{
        void implementMethod(){
            doSomeTwoThing;
        }
    }

当接口InFace的对象inFace从ClassMain调用implementMethod时会发生什么?是要执行soSomeOneThing还是doSomeTwoThing?

2 个答案:

答案 0 :(得分:1)

代码将抛出NullPointerException,因为inFace尚未实例化。

您需要为声明的变量inFace分配实现。

这可以是A类或B类。

InFace inFace = new A();

在当前示例中,您应该向ClassMain添加一个构造函数,以允许从外部自定义inFace

答案 1 :(得分:0)

在同一命名方法中执行不同计算的一些常见Classes可以与Interface分组。

假设您有一个InFace界面列表

List<InFace> faces = new ArrayList<Inface>();
faces.add(new A());
faces.add(new B());

如您所见,可以将两个不同的类添加到列表中,因为它们实现了InFace界面。

faces.get(0).implementMethod(); //class A will run
faces.get(1).implementMethod(); //class B will run