有 Java 编程相关的问题?

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

继承和创建新类之间的java差异

这两者的区别是什么:

class Machine {
    public int x = 2;
}

class Car {
    public void start(Machine myMachine) {
         myMachine.x = 10;
    }
}

以及:

class Machine {
    public int x = 2;
}

class Car extends Machine {
    public void start() {
        super.x = 10;
    }
}

在第一个例子中,我用Car类创建了一种新的对象,我可以使用Machine类中的变量x

在第二个例子中,我从Machine类继承到Car类,因此我可以在Car中使用Machine中的变量

但是我不知道什么时候应该用第一个而不是第二个,哪个更好,等等

有人能解释一下区别吗


共 (3) 个答案

  1. # 1 楼答案

    第一种有时被称为“使用a”关系,如“汽车使用机器”,而第二种有时被称为“is-a”关系,如“汽车是机器”。第二种关系叫做继承。。还有第三种广泛的类型,即“has-a”关系,您在这里没有展示:

    class Machine {}
    class Car {
        Machine machine;
    }
    

    第一种关系比第二种更容易理解。通常,如果我们想用来自同一父类(机器)的另一个子类替换一个子类(在您的示例中是汽车),我们只对第二个子类建模

  2. # 2 楼答案

    在第一个例子中,你说“我希望Car给一些机器的CarMachine没有真正的联系,它可能是“门”、“车库”或其他类Car可以与Car合作,但它们不是“Car is a…”变量x

    在第二个例子中,你说“Car是一台机器,我希望它能够将自己的x变量的值更改为10”。(例如,你可以说“我想让我的车启动自己的发动机)

    我知道在第一个例子中,我正在创建一种新对象(我说得对吗?)-它不是通过将Machine引用作为参数传递来创建新引用。而是说希望Car类的实例能够更改机器类的一个特定实例的x值。不是所有的机器,只是作为参数传递给start()方法的机器。例如:myFerrari.start(gateThree) Car有一个功能,可以在你想要的时候打开大门,但是Car有一个大门

    但是我不知道什么时候应该使用第一个,什么时候使用第二个,哪个更好,等等在第二个例子中,你说汽车是一台机器——因此它能够执行机器能够执行的所有动作,并且它也能够执行一些只针对汽车而不是所有机器的动作。要使用继承,您应该确保可以说Car是一台机器

  3. # 3 楼答案

    当一个类需要成为另一个类的类型时,使用继承,因为它们共享一些属性。所以在这种情况下,汽车可能是一种类型的机器,可能定义或扩展机器中的变量或函数

    如果一个类只需要访问或使用一个机器对象(它的变量或函数),那么最好使用第一个示例。例如,如果您想要一个MachineManager或MachineList类