Java 中的 IS a 与 HAS a
Rupam Yadav
2023年10月12日
使用面向对象的编程语言的关键特性之一是我们可以多次重用代码。通常,我们可以使用继承和组合两个概念来实现可重用性。
继承是一种 IS-A 关系,而组合是一种 HAS-A 关系。这两个概念在某些方面有所不同,但具有相同的目标,即可重用性。
下面让我们看看这两个概念之间的区别。
Java 中的 IS-A 关系
Java 中的继承或 IS-A 关系是指两个或多个类的关系。可以通过使用 Java 中的 extends
关键字来实现继承。我们可以继承父类在子类中使用它的方法和变量。
在下面的示例代码中,我们有两个类,Animal
和 Dog
,Animal
类具有返回 String 的函数 whatAmI()
,而 Dog
类 extends
类 Animal
这是继承的概念。
这种狗
是一种动物
关系。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
。我们创建了一个父类的对象或我们想在这个方法中使用的任何类。
在下面的例子中,我们有两个类,Legs
和 Dog
。
Legs
有一个方法 howManyLegs()
。在 Dog
类中,我们创建了一个 Legs
类的对象,并使用该对象来调用 howManyLegs()
函数。
现在,在这里我们可以看到正在应用 Composition 概念,Dog
HAS-A Legs
或 Dog
类 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 类 |
继承是静态绑定,不能在运行时更改 | 组合是动态绑定,可灵活更改 |
作者: Rupam Yadav
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn