Java面向对象编程07 引用传递实际引用

类关联结构

引用传递是真个Java开发与设计过程之中最为重要的技术组成,对于应用传递也与生活密切相关。

引用分析一:

假设说现在生活比较好,于是有的人可以有一辆汽车,当然,有些人(屌丝)是没有汽车,只有11路汽车可以使用,现在要求可以通过面向对象的设计来解决实心以上的这种关系转换。

package com.example.quartz.demo;

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+"、汽车价值:"+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 JavaDemo{
    public static void main(String[] args){
        //第一步 :声明对象并且设置彼此的关系
        Person person = new Person("zs",18);
        Car car = new Car("bmw",800000.00);
        person.setCar(car);//一个人有一辆车
        car.setPerson(person);//车属于一个人
        // 第二步:根据关系获取数据
        System.out.println(person.getCar().getInfo()); //代码链
        //等价于Car c = person.getCar(); c.getInfo();
        System.out.println(car.getPerson().getInfo());
    }
}

本次所操作的两个类型:Person、Car都是自定义类型,但是Person和Car都可以明确的描述出某一类群体,针对于群体关系的做出的一种设置。

自身关联

现在已经确定好了人与车的关系,但是现在也可以进一步进行该操作的完善,例如:一个人会有孩子,孩子成年之后也可以有车。

package com.example.quartz.demo;

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 + "、汽车价值:" + 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 JavaDemo {
    public static void main(String[] args) {
        //第一步 :声明对象并且设置彼此的关系   
        Person person = new Person("z3", 40);
        Person childA = new Person("l4", 20);
        Person childB = new Person("w5", 21);
        childA.setCar(new Car("BMW x1", 300000.00));
        childB.setCar(new Car("大众", 1500000.00));//匿名对象
        person.setChildren(new Person[]{childA, childB});//一个人有多个哈子
        Car car = new Car("bmw", 800000.00);
        person.setCar(car);//一个人有一辆车
        car.setPerson(person);//车属于一个人
        // 第二部:根据关系获取数据
        System.out.println(person.getCar().getInfo()); //代码连
        //等价于Car c = person.getCar(); c.getInfo();
        System.out.println(car.getPerson().getInfo());
        //根据人找到所有的孩子以及孩子对应的汽车
        for (int i = 0; i < person.getChildren().length; i++) {
            System.out.println("\t |-" + person.getChildren()[i].getInfo());
            System.out.println("\t\t |-" + person.getChildren()[i].getCar().getInfo());
        }
    }
}

这些关系的匹配都是通过引用数据类型的关联来完成的。

合成设计模式

加入说现在要求你定义出一种可以描述电脑组成的类,那么在这样的状态就必须进行拆分,电脑分为两个部分:显示器、主机;而主机上需要设置有一系列的硬件

class 电脑{
   private显示器对象数组[];
   private主机对象;
}
class 显示器{ }
class 主机 {
    private 主板对象;
    private 鼠标对象;
    private 健盘对象;

}
class 主板{
      private 内存对象数组[];
      private CPU 对象数组[];
      private显卡对象;
      private硬盘对象数组[];
}
class 键盘{}
class 鼠标{}
class 内存{}
class CPU {}
class 显卡{}
class 硬盘{}

任何的人类的产品都是可以拆分,而后进行重新组合,所以这样的设计在Java之中被称为合成设计模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值