首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -超类(继承)与父类(无继承)

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

Stack Overflow用户
提问于 2015-01-15 22:20:26
回答 4查看 360关注 0票数 0

这里的新手在准备工作面试。

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

例如,Oracle的官方Java教程给出了自行车的例子,虽然有许多不同类型的自行车(山地自行车、公路自行车或串联自行车)的共同特征,但它们都有自己独特的不同特性。为了实现这一点,我们创建了一个具有所有公共特性的类自行车,然后为山地自行车、公路自行车和串联自行车分离类,所有这些类都继承了自行车类。就像这样..。

代码语言:javascript
复制
class Bike {
     int speed;
     int gear;
}

class MountainBike extends Bike {
     int chain rings;
}

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

不是跟下面一样吗?

代码语言:javascript
复制
class Bike {
     int speed;
     int gear;

     class MountainBike {
         int chain rings;
     }

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

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

谢谢你的耐心..。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-15 22:41:04

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

第二个例子说,每个MountainBike 都属于a Bike。这完全没有意义。例如,使用第二个示例,您可以编写

代码语言:javascript
复制
Bike bike = new Bike();
Bike.MountainBike mountainBike1 = bike.new MountainBike();
Bike.MountainBike mountainBike2 = bike.new MountainBike();

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

作为Bike的内部类,有意义的东西是Wheel。然后你就可以写

代码语言:javascript
复制
Bike bike = new Bike();
Bike.Wheel frontWheel = bike.new Wheel();
Bike.Wheel backWheel = bike.new Wheel();

然后,您将有一个Bike和两个属于BikeWheels

票数 3
EN

Stack Overflow用户

发布于 2015-01-15 22:30:35

在第二个示例中,MountainBike不是Bike的扩展,而是Bike的内部类(或嵌套类)。内部类有非常特殊的用途,但您没有得到的一个好处是继承。相反,内部类通常用作只有父类才需要的帮助类。就我个人而言,我发现我很少使用它们,因为对于这个问题,我的回答通常是否定的:“父类是唯一需要使用该类的类吗?”所以,我通常会做一个单独的课程。

下面是一个参考页面,来自当前的Java公司:嵌套类

编辑

根据这一引用,使用内部类有3种“令人信服”的理由。就我个人而言,我想不出添加到列表中的任何理由,但我不认为这会使代码更容易阅读--这是非常主观的,并且取决于开发人员习惯于什么:

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

希望这能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2015-01-15 22:27:52

这里的问题是,第二个示例中的类MountainBike只能在类Bike中访问。当将Bike作为自己的类创建时,您需要扩展MountainBike,这样MountainBike才能被其他类访问,从而从它的父类Bike继承字段和方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27974081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档