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 类将自行执行该操作或要求另一个类执行该操作。
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP