有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多态性的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对象中,我可以调用Refrigeratortrip()方法,但该方法将被cm对象隐藏。现在我的问题是为什么我应该使用多态性,或者为什么我应该使用

CoolingMachines cm = new Refrigerator();

当我同意的时候

Refrigerator rf = new Refrigerator();

多态对象的效率是好还是轻?这两个对象的基本目的和区别是什么?{}和{}之间有什么区别吗


共 (3) 个答案

  1. # 1 楼答案

    因为以后如果你想用AirConditioner而不是Refrigerator来冷却,那么你只需要修改CoolingMachines cm = new AirConditioner();

  2. # 2 楼答案

    您想要使用的原因

    CoolingMachines cm = new Refrigerator();
    

    就是以后可以很容易地使用不同的CoolingMachines。您只需要更改这一行代码,其余的代码仍然可以工作(因为它只使用CoolingMachines的方法,这比特定的机器(例如Refrigerator)更通用)

    因此,对于Refrigerator的特定实例,调用cm.start();rf.start()的方式相同,但cm也可能是不同的CoolingMachines对象。这个对象可以有不同的start()实现

  3. # 3 楼答案

    对你问题的一般部分的最一般的回答(为什么我应该使用多态性?)多态性实现了几个关键的面向对象设计原则,例如:

    • 代码重用: 通过将所有“冷却机”通用的任何代码放入冷却机,您只需编写一次代码,对该代码的任何编辑都会立即生效

    • 抽象: 人类的大脑只能记录这么多东西,但它们擅长分类和等级划分。这有助于理解大型项目中正在发生的事情

    • 封装: 每个类都隐藏了它正在做的事情的细节,只是构建在基类的接口上

    • 关注点分离: 很多面向对象编程都是关于分配责任的。谁来负责这件事?专门的关注点可以分为子类

    因此,多态性只是更大的oo图景的一部分,而使用多态性的原因有时只有在您尝试进行“真正的”oo编程时才有意义