java – 如何使用多态而不是instanceof? (为什么?)

如果我们采用以下代码:

Shape p1 = new Square();
Square c1;
if(p1 instanceof Square) {
  c1 = (Square) p1;
}

优先选择多态到instanceof是什么意思,顺便说一句,为什么它更好?

编辑:我理解多态是什么;我缺少的是如何使用它而不是instanceof.

解决方法:

if … else …(或switch,或者访问者)和多态之间的主要区别是模块性.有一种所谓的开放闭合原则,它基本上意味着,当您向现有程序添加新功能时,您在现有代码中所做的更改越少越好(因为每次更改都需要一些工作,并且可能会引入错误).那么让我们比较一下变化的数量:

>添加一个新方法(例如你有paint()和getArea(),让我们添加getCircumference()):使用if-else解决方案你只需要改变一个文件 – 包含新方法的文件.使用多态,您必须更改Shape类的所有实现.
>添加一种新的Shape(你有Square,Circle – 让我们添加Triangle):使用if-else解决方案,你必须使用if-else查看所有现有的类,并为Triangle添加一个新的if分支;使用多态性,您只需要添加一个新类并在其中实现所有必需的方法.

所以,如果……其他……或多态:它取决于模块性.如果您希望以后添加许多新子类,请使用多态;如果您希望以后添加许多新方法,请使用if … else …,并在类中只放置最基本的方法,如访问器.或者换句话说:当你期望有很多if … else …分支时,你应该使用多态,当你期望很少这样的分支时,只要留下来,如果……其他……

另外:当你期望很少… else …分支,但在很多地方,你应该考虑封装这个if … else … with Visitor模式或只是为每个分支制作一个单独的case的枚举.

上一篇:java – 如果是父实例,instanceof会返回true吗?


下一篇:Java多态性-具体示例