1. 程式人生 > >java 中物件的 一對一關係 (封裝和構造方法)

java 中物件的 一對一關係 (封裝和構造方法)

java 中物件的 一對一關係

簡單介紹 java中物件的對應關係有很多種,比如單向一對一,雙向一對一,一對多,多對一,多對多等,其實現原理相同,接下來,我們詳解一對一關係。

說明 所謂的一對一就好比如一個丈夫對應了一個妻子,一本書對應了一個作者,如果我想只例項化一個丈夫物件,來獲得丈夫妻子名字、年齡,這就需要兩個物件產生關係了。

實現思路: 在丈夫類中例項化一個妻子的物件,作為丈夫類中的一個屬性,在例項化丈夫這個物件的時候,順便傳進去妻子的物件即可,兩個物件就產生了關係

應用: 在以後的程式設計中,兩個物件相隔10萬八千里,而兩個物件偶爾在不同的地方要呼叫對方,可以建立關係,一句簡單的程式碼輕鬆搞定

程式碼例項: 我要建立一個英雄類 class Hero 又建立了一個武器類 class Weapon 一個英雄要對應一個武器,假如我想通過英雄來找到他對應的武器和武器的屬性,就需要兩個類建立關係:

在test這個包下面有三個類,分別是Hero、Weapon、One2One(包含主函式)

/**
*  英雄類,定義了英雄的 名字和年齡 ,並且封裝起來了
*/
package test;
import test.Weapon;   //匯入武器類
class Hero {
	private String name;      //屬性私有化 ,防止外面直接賦值和呼叫
	private int age;
	
	private
Weapon weapon; //宣告一個武器類的物件 (私有化) // 向外界提供一個可以設定和獲取 武器類物件的方法 public void setWeapon(Weapon weapon) { this.weapon = weapon; } public Weapon getWeapon() { return weapon; } // 構造方法 ,方便建立物件時直接賦值。 public Hero() {} //預設的構造方法,一般要保留 public Hero(String name,int age) { this.name = name; this.
age = age; } // getter and setter 方法 //向外界提供可以獲取和設定本類物件 屬性的方法 public void setName(String name) { this.name=name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } }
/**
* 程式碼和上面的英雄類完全相同
*/
package test;
import test.Hero;
class Weapon {

	private String name;
	private int age;
	
	private Hero hero;   //宣告一個物件
	public void setHero(Hero hero) {
		this.hero = hero;
	}
	public Hero getHero() {
		return hero;
	}
	
	
	public Weapon() {}
	public Weapon(String name,int age) {
		this.name = name;
		this.age = age;
	}
	
	
	public void setName(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getAge() {
		return age;
	}
}

主函式:

/**
 * 面向物件的一對一關係
 */
package test;
import test.Hero;
import test.Weapon;
public class One2One {
	public static void main(String[] args) {
		Hero hero = new Hero("劉備",35);  //例項化一個物件,並且賦值
		Weapon weapon = new Weapon("雙股劍",3);
		//建立關係  ,(一句程式碼搞定)
		hero.setWeapon(weapon);  //把武器類物件設定成英雄類中的一個屬性
		weapon.setHero(hero);
		//輸出結果,用英雄類查詢其武器
		System.out.println("我的名字叫"+hero.getName()+",我現在"+hero.getAge()+"歲了,我用的武器是"+w.getName()+",等級為"+w.getAge()+"級。");
							//我的名字叫劉備,我現在35歲了,我用的武器是雙股劍,等級為3級。	

		hero.setAge(350);  //修改其屬性
		weapon.setName("生鏽的雙股劍");
		weapon.setAge(2);
		
		//Hero h = weapon.getHero();
		//用武器查詢其主人
		System.out.println("我是"+weapon.getName()+",我的等級已經降落為"+weapon.getAge()+"級了,我的主人是"+weapon.getHero().getName()+",現在已經"+weapon.getHero().getAge()+"歲了");
								//我是生鏽的雙股劍,我的等級已經降落為2級了,我的主人是劉備,現在已經350歲了

	}

}