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

Java-超类(继承)与父类(无继承),java,class,oop,inheritance,nested-class,Java,Class,Oop,Inheritance,Nested Class,新手在这里,准备工作面试 我正在阅读和实践面向对象编程的概念,但我一直坚持(在Java中)当我们可以创建成员类时,为什么继承很重要 例如,给出了自行车的示例,虽然不同类型的自行车(山地车、公路车或串联式自行车)有许多共同的特征,但它们也都有自己独特的不同特征。为了实现这一点,我们创建了一个类Bikes,它具有所有的共同特征,然后为山地自行车、公路自行车和串联自行车创建单独的类,所有这些都继承了bike类。像这样的 class Bike { int speed; int gea

新手在这里,准备工作面试

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

例如,给出了自行车的示例,虽然不同类型的自行车(山地车、公路车或串联式自行车)有许多共同的特征,但它们也都有自己独特的不同特征。为了实现这一点,我们创建了一个类Bikes,它具有所有的共同特征,然后为山地自行车、公路自行车和串联自行车创建单独的类,所有这些都继承了bike类。像这样的

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类的实例也将具有速度和档位特征,对吗?这就是继承的全部要点,即通过消除创建许多对象共有的单独数据成员的需要来减少冗余数据。那么为什么我们需要继承呢


感谢您的耐心…

您的问题是,在第二个示例中,只能在类
自行车内访问类
山地自行车。当创建
MountainBike
作为自己的类时,需要扩展
Bike
,以便其他类可以访问
MountainBike
,因此,它从其父类Bike继承字段和方法,在第二个示例中,类MountainBike只能在类Bike内访问。在创建
MountainBike
作为自己的类时,您需要扩展
Bike
,以便其他类可以访问
MountainBike
,这样它就从其父类
Bike
继承字段和方法。在第二个示例中,MountainBike不是Bike的扩展,而是自行车的内部类(或嵌套类)。内部类有非常特殊的用途,但您没有得到的一个好处是继承。相反,内部类通常用作仅父类需要的帮助器类。就个人而言,我发现我很少使用它们,因为我的答案通常是否定的:“父类是唯一需要使用这个类的类吗?”因此,我通常会创建一个单独的类来代替

以下是当前Java公司的参考页:

编辑

根据该引用,使用内部类有3个“令人信服”的理由。就个人而言,我想不出任何理由添加到列表中,但我不同意这样做会使代码更易于阅读——这是非常主观的,取决于开发人员习惯于:

  • 这是一种逻辑上对只在一个地方使用的类进行分组的方法
  • 它增加了封装
  • 它可以产生更可读和可维护的代码

  • 希望这有帮助

    在第二个示例中,MountainBike不是Bike的扩展,而是Bike的内部类(或嵌套类)。内部类有非常特殊的用途,但您没有得到的一个好处是继承。相反,内部类通常用作仅父类需要的帮助器类。就个人而言,我发现我很少使用它们,因为我的答案通常是否定的:“父类是唯一需要使用这个类的类吗?”因此,我通常会创建一个单独的类来代替

    以下是当前Java公司的参考页:

    编辑

    根据该引用,使用内部类有3个“令人信服”的理由。就个人而言,我想不出任何理由添加到列表中,但我不同意这样做会使代码更易于阅读——这是非常主观的,取决于开发人员习惯于:

  • 这是一种逻辑上对只在一个地方使用的类进行分组的方法
  • 它增加了封装
  • 它可以产生更可读和可维护的代码

  • 希望这有帮助

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

    为什么我们需要继承?管理全局性的东西,如目录。
    也许我是一家自行车店的经理,我只想知道我有多少辆自行车,以及它们的价格。但是作为一个卖家,我需要知道如果是山地自行车,城市自行车,它们之间有什么区别呢第一个例子说每辆山地自行车都是一辆自行车。应该是这样的

    第二个例子说,每辆
    山地车都属于
    自行车。这毫无意义。例如,对于第二个示例,您可以编写

    Bike bike = new Bike();
    Bike.MountainBike mountainBike1 = bike.new MountainBike();
    Bike.MountainBike mountainBike2 = bike.new MountainBike();
    
    Bike bike = new Bike();
    Bike.Wheel frontWheel = bike.new Wheel();
    Bike.Wheel backWheel = bike.new Wheel();
    
    这将创建一个名为
    Bike
    的新
    Bike
    和两个属于
    Bike
    山地自行车

    作为
    自行车
    的内部类别,有意义的东西应该是
    车轮
    。然后你就可以写了

    Bike bike = new Bike();
    Bike.MountainBike mountainBike1 = bike.new MountainBike();
    Bike.MountainBike mountainBike2 = bike.new MountainBike();
    
    Bike bike = new Bike();
    Bike.Wheel frontWheel = bike.new Wheel();
    Bike.Wheel backWheel = bike.new Wheel();
    

    然后你会有一辆
    自行车
    ,它有两个
    轮子
    ,属于
    自行车

    第一个例子说每辆
    山地自行车
    都是
    自行车
    。应该是这样的

    第二个例子说,每辆
    山地车都属于
    自行车。这毫无意义。例如,对于第二个示例,您可以编写

    Bike bike = new Bike();
    Bike.MountainBike mountainBike1 = bike.new MountainBike();
    Bike.MountainBike mountainBike2 = bike.new MountainBike();
    
    Bike bike = new Bike();
    Bike.Wheel frontWheel = bike.new Wheel();
    Bike.Wheel backWheel = bike.new Wheel();
    
    这将创建一个名为
    Bike
    的新
    Bike
    和两个属于
    Bike
    山地自行车

    作为
    自行车
    的内部类别,有意义的东西应该是
    车轮
    。那你就可以