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

	}

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值