涉及Java接口的多态行为

时间:2017-05-13 00:25:42

标签: java interface object-oriented-analysis

interface MyInterface {

      public List<String> getNames();
}

class MyClass implements MyInterface {

     @Override
     public List<String> getNames() {
         ... 
         return names;
     }     
     public List<String> getTypes() {
          ...
           return types;
     }
}

class MyClassFactory {

    public MyInterface create() {
        ...
        MyInterface myClass = new MyClass();
        return myClass;
    }
}

public class MyClient {

   MyInterface myClass = myClassFactory.create();
   List<String> types = myClass.getTypes();
}

在这段代码中,它会抱怨最后一行,“List types = myClass.getTypes();”这表示该方法没有为该类定义。这是为什么?这不是使用多态行为的正确方法吗?

2 个答案:

答案 0 :(得分:2)

  

这不是使用多态行为的正确方法吗?

如果您调用getNames()(接口中定义的方法),这将是一种完美的接口编程方式。但是,getTypes()仅在类中定义,但不在接口中定义。不允许编译器使用此信息,因此发出错误。

您可以通过向界面添加getTypes()或将myClass变量的编译时类型更改为MyClass来解决此问题。

答案 1 :(得分:0)

把“public List getTypes();”在MyClient类的MyInterface.Or中使用

MyClass myClass = (MyClass) myClassFactory.create();

这一行而不是`

MyInterface myClass = myClassFactory.create();