Java - 超类(继承)与父类(无继承)

时间:2015-01-15 22:20:27

标签: java class oop inheritance nested-class

新手在这里准备面试。

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

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

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...
}

我的意思是MountainBike类创建的实例也具有特征速度和装备,对吧?这就是整个继承点,即通过消除创建许多对象共有的单独数据成员的需要来减少冗余数据。那么为什么我们需要继承?

感谢您的耐心......

4 个答案:

答案 0 :(得分:3)

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

第二个例子说每个MountainBike 属于一个Bike。这毫无意义。例如,使用您的第二个示例,您可以编写

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

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

作为Bike的内部类将有意义的事情将是Wheel。然后你可以写

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

然后你会有BikeWheels属于Bike

答案 1 :(得分:1)

在第二个例子中,MountainBike 是Bike的扩展,而是Bike的内部类(或嵌套类)。内部类具有非常特定的用途,但是你没有获得的一个好处是继承。相反,内部类通常用作只有父类需要的辅助类。就个人而言,我发现我很少使用它们,因为我的答案通常是否定的,对于这个问题:"父类是否是唯一需要使用这个类的类?"所以,我通常最终会创建一个单独的类。

以下是来自当前Java公司的参考页面:Nested classes

修改

根据该参考文献,有3个引人注目的'使用内部类的原因。就个人而言,我无法想到添加到列表中的任何理由,但我不同意它使代码更易于阅读 - 这是非常主观的,并且取决于开发人员习惯的内容:

  1. 这是一种逻辑分组仅在一个地方使用的类的方法
  2. 增加封装
  3. 它可以带来更易读和可维护的代码
  4. 希望这有帮助!

答案 2 :(得分:0)

您的问题是,您的第二个示例中的课程MountainBike只能在课程Bike内访问。在创建Bike作为其自己的类时,您需要扩展MountainBike,以便其他类可以访问MountainBike,以便从中继承字段和方法它的父类Bike

答案 3 :(得分:0)

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