Java - Superclass(继承)与 Parent class(无继承)

Java - Superclass (Inheritance) vs Parent class (no Inheritance)

这里是新手,准备面试。

我正在阅读和练习面向对象的编程概念,但我仍然坚持为什么当(在 Java 中)我们可以创建成员 classes.. .

例如,Oracle's official Java tutorial,给出了自行车的例子,虽然不同类型的自行车(山地车、公路车或双人自行车)有许多共同的特征,但它们都有自己独特的不同特征也。因此,为了实现这一点,我们创建了一个 class 自行车,它具有所有共同特征,然后将 class 山地自行车、公路自行车和双人自行车分开,它们都继承了自行车 class .像这样....

class Bike {
     int speed;
     int gear;
}

class MountainBike extends Bike {
     int chain rings;
}

//classes for road bike and tandem bike etc...

跟下面是不是一回事?

class Bike {
     int speed;
     int gear;

     class MountainBike {
         int chain rings;
     }

     //classes for Road bike or tandem bike etc...
}

我的意思是 class MountainBike 创建的实例也将具有速度和齿轮特性,对吗?这就是继承的全部要点,即通过消除创建许多对象共有的单独数据成员的需要来减少冗余数据。那么为什么我们需要继承呢?

感谢您的耐心等待...

您的问题是第二个示例中的 class MountainBike 只能在 class Bike 中访问。您需要在创建 MountainBike 时扩展 Bike,因为它是自己的 class,以便其他 classes 可以访问 MountainBike,这样它从其父 class Bike.

继承字段和方法

在第二个示例中,MountainBike 不是 Bike 的扩展,而是 Bike 的内部 class(或嵌套 class)。内部 classes 有非常具体的用途,但您没有得到的一个好处是继承。相反,内部 classes 通常用作只有父 class 需要的助手 class。就个人而言,我发现我很少使用它们,因为我对这个问题的回答通常是否定的:"Is the parent class the only class that would need to use this class?" 所以,我通常最终会单独制作一个 class。

这是参考页,来自当前 Java 公司:Nested classes

编辑

根据该参考,使用内部 class 有 3 个 'compelling' 理由。就个人而言,我想不出有什么理由可以添加到列表中,但我不同意它使代码更易于阅读——这是非常主观的,并且取决于开发人员的习惯:

  1. 这是一种对仅在一个地方使用的 class 进行逻辑分组的方法
  2. 它增加了封装
  3. 它可以使代码更具可读性和可维护性

希望对您有所帮助!

为什么我们需要继承?管理全局的东西,比如目录。 可能我是一家自行车店的经理,我只需要知道我有多少辆自行车,以及它们的价格。但是作为卖家我想知道是山地车还是城市车,有什么区别

第一个例子说每个 MountainBike 一个 Bike。应该是这样。

第二个例子说每个MountainBike 属于一个Bike。这根本没有意义。例如,对于第二个示例,您可以编写

Bike bike = new Bike();
Bike.MountainBike mountainBike1 = bike.new MountainBike();
Bike.MountainBike mountainBike2 = bike.new MountainBike();

这将创建一个名为 bike 的新 Bike 和属于 bike 的两个 MountainBike

作为 Bike 的内部 class 有意义的是 Wheel。然后你可以写

Bike bike = new Bike();
Bike.Wheel frontWheel = bike.new Wheel();
Bike.Wheel backWheel = bike.new Wheel();

然后你会有一个 Bike 和两个属于 Bike.

Wheels