如何在不扩展类的情况下实现动态多态

时间:2012-09-10 07:24:38

标签: java oop design-patterns polymorphism

在接受采访时我被问到如何在不扩展课程的情况下实现动态多态性。怎么办呢?

3 个答案:

答案 0 :(得分:40)

Decorator design pattern利用encapsulation就是你正在寻找的东西。

通过继承进行多态性:

class Cat {
  void meow() {
    // meow...
  }
}
class Lion extends Cat {
}

通过封装的多态性(装饰模式):

interface Cat {
  void meow();      
}
class Lion implements Cat {
  private Cat cat;
  void meow() {
    this.cat.meow();
  }
}

PS。有关装饰器的更多信息:http://www.yegor256.com/2015/02/26/composable-decorators.html

答案 1 :(得分:30)

简单的解决方案是编写一个实现接口而不是扩展基类的类。

另一个解决方案是创建一个动态代理......这实际上是一种在没有显式编写类的情况下实现接口的聪明方法。有关详细信息,请参阅Proxy javadoc

是的,这些是(或可能是)装饰器模式的例子,虽然这里的关键是实现技术而不是设计模式。

答案 2 :(得分:3)

根据我的经验,在大多数求职面试中,问题并没有寻找过于复杂的答案,而且大多数时候都只是棘手的问题,所以如果他们专门针对多态而不延长课程,那么我会说:

是的,您可以通过实现接口而不是扩展类来实现动态多态

然后,如果他们要求更多选项,那么可以提出代理,模式或其他内容。

希望它有所帮助!