Java中的 Has-A-Relation 是什么?
关联是通过它们的对象建立的两个独立类之间的关系。组合和聚合是两种关联形式。在Java中,Has-A 关系也称为组合。它还用于Java中的代码可重用性。在Java中,Has-A 关系本质上意味着一个类的示例引用了另一个类的场合或类似类的另一个出现。例如,一辆车有一个马达,一条狗有一条尾巴等等。在Java中,没有这样的口号来执行 Has-A 关系。然而,我们通常使用新的标语来实现Java中的 Has-A 关系。
Has-a 是一种特殊形式的关联,其中:
- 它代表 Has-A 关系。
- 它是一种单向关联,即单向关系。例如,上面所示的脉冲星摩托车有一个发动机,但反之亦然是不可能的,因此本质上是单向的。
- 在聚合中,两个条目都可以单独存在,这意味着结束一个实体不会影响另一个实体。
插图:
这表明 Pulsar 类有一个引擎。通过为引擎使用不同的类,我们不需要将具有速度的整个代码放在 Van 类中,这使得可以在众多应用程序中重用 Speed 类。
在面向对象的元素中,客户不必过多关注哪篇文章完成了真正的工作。为了实现这一点,Van 类对 Van 类的客户端隐藏了执行的微妙之处。因此,本质上发生的情况是客户会要求 Van 班级进行特定活动,而 Van 班级将在没有其他人帮助的情况下完成工作,或者要求另一个班级进行该活动。
实现:这里是相同的实现如下:
- Car 类有几个实例变量和几个方法
- 玛莎拉蒂是一种汽车,它扩展了汽车类别,表明玛莎拉蒂是汽车。玛莎拉蒂还使用引擎的方法,停止,使用组合。所以它表明玛莎拉蒂有发动机。
- Engine 类具有玛莎拉蒂类使用的两个方法start()和stop() 。
例子:
Java
// Java Program to Illustrate has-a relation
// Class1
// Parent class
public class Car {
// Instance members of class Car
private String color;
private int maxSpeed;
// Main driver method
public static void main(String[] args)
{
// Creating an object of Car class
Car nano = new Car();
// Assigning car object color
nano.setColor("RED");
// Assigning car object speed
nano.setMaxSpeed(329);
// Calling carInfo() over object of Car class
nano.carInfo();
// Creating an object of Maserati class
Maserati quattroporte = new Maserati();
// Calling MaseratiStartDemo() over
// object of Maserati class
quattroporte.MaseratiStartDemo();
}
// Methods implementation
// Method 1
// To set the maximum speed of car
public void setMaxSpeed(int maxSpeed)
{
// This keyword refers to current object itself
this.maxSpeed = maxSpeed;
}
// Method 2
// To set the color of car
public void setColor(String color)
{
// This keyword refers to current object
this.color = color;
}
// Method 3
// To display car information
public void carInfo()
{
// Print the car information - color and speed
System.out.println("Car Color= " + color
+ " Max Speed= " + maxSpeed);
}
}
// Class2
// Child class
// Helper class
class Maserati extends Car {
// Method in which it is shown
// what happened with the engine of Puslar
public void MaseratiStartDemo()
{
// Creating an object of Engine type
// using stop() method
// Here, MaseratiEngine is name of an object
Engine MaseratiEngine = new Engine();
MaseratiEngine.start();
MaseratiEngine.stop();
}
}
// Class 3
// Helper class
class Engine {
// Method 1
// To start a engine
public void start()
{
// Print statement when engine starts
System.out.println("Started:");
}
// Method 2
// To stop a engine
public void stop()
{
// Print statement when engine stops
System.out.println("Stopped:");
}
}
输出
Car Color= RED Max Speed= 150
Started:
Stopped: