Java 中的继承(is-a)与组合(has-a)关系


IS-A 关系

IS-A 是一种表达方式,表示“这个对象是那个对象的一种类型”。让我们看看如何使用 extends 关键字来实现继承。

public class Animal {
}
public class Mammal extends Animal {
}
public class Reptile extends Animal {
}
public class Dog extends Mammal {
}

现在,如果我们考虑 IS-A 关系,我们可以说:

  • 哺乳动物 IS-A 动物
  • 爬行动物 IS-A 动物
  • 狗 IS-A 哺乳动物
  • 因此:狗 IS-A 动物

通过使用 extends 关键字,子类将能够继承超类的所有属性,除了超类的私有属性。

我们可以通过使用 instanceof 运算符来确保哺乳动物实际上是动物。

示例

在线演示

class Animal {
} class Mammal extends Animal {
} class Reptile extends Animal {
} public class Dog extends Mammal {
   public static void main(String args[]) {
      Animal a = new Animal();
      Mammal m = new Mammal();
      Dog d = new Dog();
      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
    }
}

这将产生以下结果:

输出

true
true
true

HAS-A 关系

这些关系主要基于用法。这决定了某个类是否 HAS-A 某些东西。这种关系有助于减少代码重复和错误。

让我们来看一个例子:

示例

public class Vehicle{ }
public class Speed{ }
public class Van extends Vehicle {
   private Speed sp;  
}

这表明 Van 类 HAS-A 速度。通过为速度创建一个单独的类,我们不必将属于速度的整个代码放入 Van 类中,这使得可以在多个应用程序中重用 Speed 类。

在面向对象的功能中,用户不需要关心哪个对象在执行实际工作。为了实现这一点,Van 类向 Van 类的用户隐藏了实现细节。因此,基本上发生的事情是,用户会要求 Van 类执行某个操作,而 Van 类将自行执行该操作或要求另一个类执行该操作。

更新于: 2020年6月17日

690 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.