上一篇:领略Java艺术之万物皆“数组” | 带你学《Java面向对象编程》之二十一
【本节目标】
通过阅读本节内容,你将初步掌握由现实世界物物相联而体现到Java世界中的类之间与类本身相互关联的实现方法,并通过合理化拆分类内元素达到高可用的要求。
引用传递是整个Java开发设计过程之中最为重要的技术组成,引用传递也与实际的生活密切相关。
引用应用分析一:(类关联结构)
假设生活品质比较好的人可以有一辆汽车,当然,一些生活较差的人是没有汽车的,只能依靠步行。要求可以通过面向对象的设计来解决实现以上的关系转换。
图一 人与车之间的关系图
class Car {
private String name ;
private double price ;
private Person person ; //车应该属于一个人
public Car(String name , double price) {
this.name = name ;
this.price = price ;
}
public void setPerson(Person person) {
this.person = person ;
}
public Person getPerson {
return this.person ;
}
public String getInfo() {
return “汽车品牌型号:” + this.name + “、汽车价值:” + this.price ;
}
}
class Person {
private String name ;
private int age ;
private Car car ; //一个人有一辆车
public Person(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 getInfo() {
return “姓名:” + this.name + “、年龄:” + this.age ;
}
}
public class ArrayDemo {
public static void main (String args[ ]) {
//第一步:声明对象并且设置彼此关系
Person person = new Person(“林强”, 29) ;
Car car = new Car(“宾利”,8000000.00) ;
person.setCar(car) ; //一个人有一辆车
car.setPerson(person) ; //一辆车属于一个人
//第二步:根据关系获取数据
System.out.println(person.getCar().getInfo()) ; //代码链
System.out.println(car.getPerson().getInfo()) ;
}
}
图二 执行结果图
本次所操作的两个类型:Person、Car都是自定义类型,但是Person和Car都可以明确的描述出某一类群体,现在是针对于群体关系做出的一种设置。
引用应用分析二:(自身关联)
现在已经确定好人与车的关系,但是现在可以进一步进行该操作的完善,例如:一个人有孩子,孩子也可以在成年之后有车。
图三 人、后代与车的关系
class Car {
private String name ;
private double price ;
private Person person ; //车应该属于一个人
public Car(String name , double price) {
this.name = name ;
this.price = price ;
}
public void setPerson(Person person) {
this.person = person ;
}
public Person getPerson {
return this.person ;
}
public String getInfo() {
return “汽车品牌型号:” + this.name + “、汽车价值:” + this.price ;
}
}
class Person {
private String name ;
private int age ;
private Car car ; //一个人有一辆车
private Person children [] ; //一个人有多个孩子
public Person(String name ,int age) {
this.name = name ;
this.age = age ;
}
public void setChildren(Person children []) {
this.children = children ;
}
public Person [] getChildren() {
return this.children ;
}
public void setCar(Car car) {
this.car = car ;
}
public Car getCar {
return this.car ;
}
public String getInfo() {
return “姓名:” + this.name + “、年龄:” + this.age ;
}
}
public class ArrayDemo {
public static void main (String args[ ]) {
//第一步:声明对象并且设置彼此关系
Person person = new Person(“吴硕”, 29) ;
Person childA = new Person(“林强”,18) ;
Person childB = new Person(“郭仁义”,19) ;
childA.setCar(new Car(“BMW X1” ,300000.00)) ; //匿名对象
childB.setCar(new Car(“法拉利” ,1500000.00)) ; //匿名对象
Person.setChildren(new Person [] {childA ,childB}) ; //一个人有多个孩子
Car car = new Car(“宾利”,8000000.00) ;
person.setCar(car) ; //一个人有一辆车
car.setPerson(person) ; //一辆车属于一个人
//第二步:根据关系获取数据
System.out.println(person.getCar().getInfo()) ; //代码链
System.out.println(car.getPerson().getInfo()) ;
//根据人找到所有的孩子以及孩子对应的车
for (int x = 0 ; x < person.getChildren().length ; x ++) {
System.out.println(“\t|-” + person.getChildren ()[x].getInfo()) ;
System.out.println(“\t\t|-” + person.getChildren
()[x].getCar.getInfo()) ;
}
}
}
图四 执行结果二
这些关系的匹配都是通过引用数据类型的关联来完成的。
引用应用分析三(合成设计模式)
假设现在要求定义出一种可以描述电脑组成的类,那么在这样的状态下就必须进行拆分,电脑分为两部分:显示器和主机;而主机上需要设置有一系列的硬件。
class 电脑{
private 显示器 对象数组 [] ;
private 主机 对象;
}
class 显示器{}
class 主机{
private 主板 对象 ;
private 鼠标 对象 ;
private 键盘 对象 ;
}
class 主板{
private 内存 对象数组 [] ;
private CPU 对象数组 [] ;
private 显卡 对象
private 硬盘 对象数组 [] ;
}
class 键盘{}
class 鼠标{}
class 内存{}
class CPU{}
class 显卡{}
class 硬盘{}
任何的人类的科技产品都可以进行拆分,而后进行重新组合的,所以这样的设计在Java中被称为合成设计模式。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学