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岁了
}
}