当前位置:编程学习 > JAVA >>

详解类与类的关联关系

仔细想了类与类之间的关系,感觉很多资料书说得有很多地方都是不正确的,很多也没有说清楚。希望本篇文章能给读者一些帮助,也自勉。本篇文章引用了别人的东西,并非全部原创。

 

一:一般化关系(也称泛化关系)

UML的关系图:

 

\

代码描述:

[java]
public interface Animal { 
     public void breath(); 

public interface Animal {
     public void breath();
}
 

[java]
public class Dog implements Animal{ 
    public void breath() { 
        System.out.println("现在发出的是狗呼吸的声音");      
    } 

public class Dog implements Animal{
 public void breath() {
        System.out.println("现在发出的是狗呼吸的声音");  
 }
}

现在我们就可以说Animal与Dog这两个类之间的关系就是一般化关系。通俗一点说:两个类有继承关系或者implements关系就说这两个类是一般化关系。

 

二:关联关系:

UML关系图:

 

\

代码描述:

[java]
public class Driver { 
   private Car car; 
   public void start(){ 
       car.run(); 
   } 

public class Driver {
   private Car car;
   public void start(){
    car.run();
   }
}

[java]
public class Car { 
   public void run(){ 
       System.out.println("车子启动的方法"); 
   } 

public class Car {
   public void run(){
    System.out.println("车子启动的方法");
   }
}
什么是关联关系呢?

eg:司机类关联着车子类,而不能说车子类是司机类的一部分吧?!

 

三:聚合关系:

UML关系图:

 

 

\

什么是聚合关系呢?

就是has-a的关系,engine类和tire类都是属于car类的一部分。是整体与部分的关系!!但是注意:比如说这个engine可以是car类的一部分,也可以是冰箱类的一部分。engine可以被冰箱类引用。

 

代码实现:

[java]
public class Car { 
   private Engine engine; 
   public void run(){ 
       engine.begin(); 
   } 

public class Car {
   private Engine engine;
   public void run(){
    engine.begin();
   }
}
 

[java]
public class Engine { 
   public void begin(){ 
       System.out.println("启动engine"); 
   } 

public class Engine {
   public void begin(){
    System.out.println("启动engine");
   }
}
看起来好像和关联差不多,但是本质已经改变了。

 

 

四:合成关系:

UML关系图:

 

\

代码实现:

[java]
public class Monkey { 
   private Limb limb; 
   <SPAN style="COLOR: #ff0000">public Monkey(){ 
       limb = new Limb(); 
   } 
</SPAN>   public  void  useLimb(){ 
       limb.run(); 
   } 

public class Monkey {
   private Limb limb;
   public Monkey(){
    limb = new Limb();
   }
   public  void  useLimb(){
    limb.run();
   }
}
 

[java]
public class Limb { 
    public void run(){ 
        System.out.println("行走的方法"); 
    } 

public class Limb {
    public void run(){
     System.out.println("行走的方法");
    }
}

很多人都使用setter的方法注入,我认为是不对的。用构造方法注入才能体现出是合成关系。

 

什么是合成关系,到底聚合关系和合成关系的区别是什么?

我查阅了很多的资料,都说的不很清楚,实际上,合成关系也是聚合关系,但是注意:比如说limb只能属于美猴王的,不能被其它的类引用。它的生命周期随另一个类的生命周期的开始而开始,结束而结束。

 

五:依赖关系:

代码实现:

[java]
public class perosn { 
   public void buy(House house){ 
       house.live(); 
   } 

public class perosn {
   public void buy(House house){
    house.live();
   }
}
 

[java]
public class House { 
   public void live(){ 
       System.out.println("买了,你就能住了"); 
   } 

public class House {
   public void live(){
    System.out.println("买了,你就能住了");
   }
}
注意:依赖关系的时候,一个对象不会作为另一个类属性!!!!!!

 

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,