美文网首页
13、组合:子类对象里藏着一个父类对象

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

作者: 爱学习的代代 | 来源:发表于2021-03-26 09:04 被阅读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类中的方法修改库存。

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

    相关文章

      网友评论

          本文标题:13、组合:子类对象里藏着一个父类对象

          本文链接:https://www.haomeiwen.com/subject/nfclhltx.html