多态性的java好处
当我开始寻找多态性的好处时,我发现这里有this个问题。但在这里,我找不到我的答案。让我告诉你我想找到什么。这里我有一些课程:
class CoolingMachines{
public void startMachine(){
//No implementationion
}
public void stopMachine(){
//No implementationion
}
}
class Refrigerator extends CoolingMachines{
public void startMachine(){
System.out.println("Refrigerator Starts");
}
public void stopMachine(){
System.out.println("Refrigerator Stop");
}
public void trip(){
System.out.println("Refrigerator Trip");
}
}
class AirConditioner extends CoolingMachines{
public void startMachine(){
System.out.println("AC Starts");
}
public void stopMachine(){
System.out.println("AC Stop");
}
}
public class PolymorphismDemo {
CoolingMachines cm = new Refrigerator();
Refrigerator rf = new Refrigerator();
}
现在,我在Demo类中创建了两个对象,它们是Refrigerator
的引用。我完全理解,从rf
对象中,我可以调用Refrigerator
的trip()
方法,但该方法将被cm
对象隐藏。现在我的问题是为什么我应该使用多态性,或者为什么我应该使用
CoolingMachines cm = new Refrigerator();
当我同意的时候
Refrigerator rf = new Refrigerator();
多态对象的效率是好还是轻?这两个对象的基本目的和区别是什么?{
# 1 楼答案
因为以后如果你想用
AirConditioner
而不是Refrigerator
来冷却,那么你只需要修改CoolingMachines cm = new AirConditioner();
# 2 楼答案
您想要使用的原因
就是以后可以很容易地使用不同的
CoolingMachines
。您只需要更改这一行代码,其余的代码仍然可以工作(因为它只使用CoolingMachines
的方法,这比特定的机器(例如Refrigerator
)更通用)因此,对于
Refrigerator
的特定实例,调用cm.start();
和rf.start()
的方式相同,但cm
也可能是不同的CoolingMachines
对象。这个对象可以有不同的start()
实现# 3 楼答案
对你问题的一般部分的最一般的回答(为什么我应该使用多态性?)多态性实现了几个关键的面向对象设计原则,例如:
代码重用: 通过将所有“冷却机”通用的任何代码放入冷却机,您只需编写一次代码,对该代码的任何编辑都会立即生效
抽象: 人类的大脑只能记录这么多东西,但它们擅长分类和等级划分。这有助于理解大型项目中正在发生的事情
封装: 每个类都隐藏了它正在做的事情的细节,只是构建在基类的接口上
关注点分离: 很多面向对象编程都是关于分配责任的。谁来负责这件事?专门的关注点可以分为子类
因此,多态性只是更大的oo图景的一部分,而使用多态性的原因有时只有在您尝试进行“真正的”oo编程时才有意义