java 中物件的 一對一關係 (封裝和構造方法)
阿新 • • 發佈:2018-12-17
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歲了
}
}