Java 中的 IS a 与 HAS a

  1. Java 中的 IS-A 关系
  2. Java 中的 HAS-A 关系
  3. IS-A 关系和 HAS-A 关系之间的主要区别

使用面向对象的编程语言的关键特性之一是我们可以多次重用代码。通常,我们可以使用继承和组合两个概念来实现可重用性。

继承是一种 IS-A 关系,而组合是一种 HAS-A 关系。这两个概念在某些方面有所不同,但具有相同的目标,即可重用性。

下面让我们看看这两个概念之间的区别。

Java 中的 IS-A 关系

Java 中的继承或 IS-A 关系是指两个或多个类的关系。可以通过使用 Java 中的 extends 关键字来实现继承。我们可以继承父类在子类中使用它的方法和变量。

在下面的示例代码中,我们有两个类,AnimalDogAnimal 类具有返回 String 的函数 whatAmI(),而 DogextendsAnimal 这是继承的概念。

这种是一种动物关系。Dog 类现在可以从其父类访问 whatAmI() 方法。

class Animal {

    public String whatAmI() {
        return "I belong to Animal class";
    }
}

class Dog extends Animal {
    public void aboutMe() {
        System.out.println("I am a Dog class and " + whatAmI());
    }
}

输出:

I am a Dog class and I belong to Animal class

Java 中的 HAS-A 关系

与继承不同,组合或 HAS-A 关系不使用任何关键字,如 extends。我们创建了一个父类的对象或我们想在这个方法中使用的任何类。

在下面的例子中,我们有两个类,LegsDog

Legs 有一个方法 howManyLegs()。在 Dog 类中,我们创建了一个 Legs 类的对象,并使用该对象来调用 howManyLegs() 函数。

现在,在这里我们可以看到正在应用 Composition 概念,Dog HAS-A LegsDog 类 HAS-A Legs 属性。

class Legs {

    public String howManyLegs() {
        return "I have four legs";
    }
}

class Dog {
    Legs legs = new Legs();

    public void aboutMe() {
        System.out.println("I am a Dog class and " + legs.howManyLegs());
    }
}

输出:

I am a Dog class and I have four legs

IS-A 关系和 HAS-A 关系之间的主要区别

IS-A 有一个
这是继承的概念 这是一个组成的概念
一个类不能扩展多个类。 一个类可以与多个其他类具有 HAS-A 关系
不能在继承中扩展最终类 我们可以在 Composition 中重用 final 类
继承是静态绑定,不能在运行时更改 组合是动态绑定,可灵活更改