13、组合:子类对象里藏着一个父类对象

2021-03-26  本文已影响0人  爱学习的代代

除了继承,实现通过同样的功能,我们可以使用组合
组合是在子类中声明一个对父类的引用。

通过组合实现和继承一样的功能:
核心代码:


image.png image.png

<TestPhoneV1.java>

package day09;

public class TestPhoneV1 {
    public static void main(String[] args) {
        MerchandiseWithConstructor merchandise = new MerchandiseWithConstructor(1,"小米9",100,3999,3599);


        PhoneV1 v1 = new PhoneV1(6.0,3.5,8.0,128.0,"小米", "安卓", merchandise);
        v1.describe();
    }
}



<PhoneV1.java>



package day09;

public class PhoneV1 {
    private double screenSize;
    private double cpuHZ;
    private double memoryG;
    private double storageG;
    private String brand;
    private String os;
    private MerchandiseWithConstructor merchandise;

    public  PhoneV1(double screenSize, double cpuHZ, double memoryG, double storageG, String brand, String os, MerchandiseWithConstructor merchandise) {
        this.screenSize = screenSize;
        this.cpuHZ = cpuHZ;
        this.memoryG = memoryG;
        this.storageG = storageG;
        this.brand = brand;
        this.os = os;
        this.merchandise = merchandise;
    }
    public void describe() {
        System.out.println("当前商品的名字是:" + this.merchandise.getName() + " 库存个数是:" + this.merchandise.getCount() + " 进价是:" + this.merchandise.getPurchasingRrice() + "元 " + "售价是:" + this.merchandise.getSoldPrice() + "元 " + "销售一个的毛利润是: " + (this.merchandise.getSoldPrice() - this.merchandise.getPurchasingRrice()));
        System.out.println("手机配置信息如下:\n屏幕大小:" + this.screenSize + "英寸 \nCPU主频:" + this.cpuHZ + "GHz \n内存大小:" + this.memoryG + "G \n存储空间:" + storageG + "G \n品牌:" + this.brand + " \n操作系统:" + os);
    }

    public double getScreenSize() {
        return screenSize;
    }

    public void setScreenSize(double screenSize) {
        this.screenSize = screenSize;
    }

    public double getCpuHZ() {
        return cpuHZ;
    }

    public void setCpuHZ(double cpuHZ) {
        this.cpuHZ = cpuHZ;
    }

    public double getMemoryG() {
        return memoryG;
    }

    public void setMemoryG(double memoryG) {
        this.memoryG = memoryG;
    }

    public double getStorageG() {
        return storageG;
    }

    public void setStorageG(double storageG) {
        this.storageG = storageG;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getOs() {
        return os;
    }

    public void setOs(String os) {
        this.os = os;
    }

    public MerchandiseWithConstructor getMerchandise() {
        return merchandise;
    }

    public void setMerchandise(MerchandiseWithConstructor merchandise) {
        this.merchandise = merchandise;
    }
}


继承和组合的关系:XX是YY的一种,还会组合了YY,"手机是到底手电筒的一种,还是组合了可以当手电筒的闪光灯"

如果对于一个需求,需要控制手机(也是一种商品)的数量购买限制,那么怎么实现呢?

二、使用组合

缺点:

  1. 修改Merchandise类会限制所有商品的购买数量
  2. 极有可能你无法修改Merchandise类
  3. 手机提供一个buyCount的方法,别人可以不调用,或者使用Merchandise类中的方法修改库存。

鉴于此,继承就可以发挥其作用了。

上一篇 下一篇

猜你喜欢

热点阅读