引用传递实际应用

引用传递可以说是整个java的核心,也正是因为有了引用传递,所以可以更好地表现出现实世界的抽象

例如,现在要求描述出这样的一种关系:一个人有一辆汽车或没有车。很明显,现在应该是有两个实体类:人(Member)车(Car).

范例:现在可以得出如下的设计

class Member{
	private String name;
	private int age;
	//如果car==null,表示这个人没有车
	private Car car;//一个人只能由一辆车
	public Member(String name,int age) {
		this.name=name;
		this.age=age;
	}
	public void setCar(Car car) {
		this.car=car;
	}
	public Car getCar() {
		return this.car;
	}
	public String getMemberInfo() {
		return "【Member】name=  "+this.name+"  age= "+this.age;
	}
}
class Car{
	private String name;
	private double price;
	private Member member;
	public Car(String name,double price) {
		this.name=name;
		this.price=price; 
		
	}
	public void setMember(Member member) {
		this.member=member;
	}
	public Member getMember() {
		return this.member;
	}
	public String getCarInfo() {
		return "【Car】name=  "+this.name+" price=  "+this.price;
	}
}
public  class TestDemo{
	public static void main(String args[]) {
		//第一步:根据关系设置相应的数据
		//1、分别创建各自对象的实例
		Member mem=new Member("小强",30);
		Car car=new Car("法拉利",5000000.0);
		//2、设置对象间的引用关系
		mem.setCar(car);//一个人有一辆车
		car.setMember(mem);//一辆车属于一个人
		//第二部:根据关系取出数据
		//3、通过人可以找到车
		System.out.println(mem.getMemberInfo()); 
		System.out.println(mem.getCar().getCarInfo());//mem调用getCar方法 ,
		//★方法返回Car的类对象,我们使用getCarInfo()
		 //4、通过车找到人
		System.out.println(car.getMember().getMemberInfo());
		//原理同上
	}
}//结果【Member】name=  小强  age= 30
【Car】name=  法拉利 price=  5000000.0
【Member】name=  小强  age= 30
那么如果说现在要进一步设计,我会有后代,后代还会有车。 

这个时候,建议一个孩子类,如果还有孙子,继续建立孙子类

直接在Member类里建议一个新的属性,这个属性描述的是孩子,而孩子的类型就是Member.

观察代码并比较 下面是有孩子的

class Member{
	private String name;
	private int age;
	private Member child;
	//如果car==null,表示这个人没有车
	private Car car;//一个人只能由一辆车
	public Member(String name,int age) {
		this.name=name;
		this.age=age;
	}
public void setChild(Member child) {
	this.child=child;
}
public Member getChild() {
	return this.child;
} 
	public void setCar(Car car) {
		this.car=car;
	}
	public Car getCar() {
		return this.car;
	}
	public String getMemberInfo() {
		return "【Member】name=  "+this.name+"  age= "+this.age;
	}
}

class Car{
	private String name;
	private double price;
	private Member member;
	public Car(String name,double price) {
		this.name=name;
		this.price=price; 
		
	}
	public void setMember(Member member) {
		this.member=member;
	}
	public Member getMember() {
		return this.member;
	}
	public String getCarInfo() {
		return "【Car】name=  "+this.name+" price=  "+this.price;
	}
}
public  class TestDemo{
	public static void main(String args[]) {
		//第一步:根据关系设置相应的数据
		//1、分别创建各自对象的实例
		Member mem=new Member("小强",30);
		Car car=new Car("法拉利",5000000.0);
		Member chd=new Member("张三",8);//你的儿子
		Car cc=new Car("马萨拉蒂",3.0);//你儿子的车 
		//2、设置对象间的引用关系
		mem.setCar(car);//一个人有一辆车
		mem.setChild(chd);
		chd.setCar(cc);
		car.setMember(mem);//一辆车属于一个人
		//第二部:根据关系取出数据
		//3、通过人可以找到车
		System.out.println(mem.getMemberInfo()); 
		System.out.println(mem.getCar().getCarInfo());//mem调用getCar方法 ,
		//★方法返回Car的类对象,我们使用getCarInfo()
		 //4、通过车找到人
		System.out.println(car.getMember().getMemberInfo());
		//原理同上
		//5、通过人找到他的孩子
		System.out.println(mem.getChild().getMemberInfo());
		//6、通过人找到他的孩子的车,代码链
		System.out.println(mem.getChild().getCar().getCarInfo());
	}
}
//5.6的结果
【Member】name=  张三  age= 8
【Car】name=  马萨拉蒂 price=  3.0

这些关系的配置可以很好的反应现实生活

如果这个程序还想再扩展,实际上也可以更好的描述出实际的组成关系,例如:一台电脑由显示器、主机、键盘、键盘 、内存条、鼠标、cpu、主板、显卡。  

class 电脑{
	private 显示器[]对象;
	private 主机[] 对象;
	private 键盘[] 对象;
	private 鼠标[] 对象;
}
class 显示器{}
class 主机{
	private 主板 对象;
}
class 鼠标{}
class 主板{
	private CPU [] 对象;
	private 内存 [] 对象;
	private 硬盘 [] 对象;}
class CPU{}
class 显卡{}
class 内存{}
class 键盘{}

只有将这些细小的类合并到一起才能够描述出完整的概念,而在实际生活之中,这些细小的部分都可以进行替换。
所以这样的设计就属于合成设计模式。
以后的项目开发之中,所有用到的类基本上都要求由开发者自行定义。这些里面使用的都是引用传递的概念



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值