美文网首页
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、组合:子类对象里藏着一个父类对象

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

  • 里氏转换

    里氏转换的特点 父类引用指向子类对象 如果父类引用指向的是子类对象,那么可以将这个父类强转为子类对象 将父类强转为...

  • 探讨Java中的父子类转化问题

    有两个问题: (1)子类对象可以转化为父类对象吗? (2)父类对象可以转化为子类对象吗? ------------...

  • 16、子类和父类的赋值引用关系

    1、将子类的对象赋值给父类的引用✅。即:父类的引用可以指向子类的对象 2、将父类的对象直接赋值值给子类的引用 ❌,...

  • 向上转型和线下转型

    概念 向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是...

  • java的多态

    什么是“父类引用指向子类的对象”:父类 Person 子类 StudentPerson ...

  • Java学习笔记 (一)

    多态性 方法的重载与覆写 对象的多态性①.向上转型:子类对象→父类对象 (自动完成)②.向下转型:父类对象→子类对...

  • 向上转型与向下转型

    父类引用指向子类对象,则称为向上转型(upcasting)子类引用指向父类对象,称为向下转型(downcastin...

  • .Net基础10

    1、里氏转换 1)、子类可以赋值给父类2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象 2、类型转...

  • C#基础第十天(面向对象)

    1、里氏转换 1.子类可以赋值给父类 2.如果父类中装的是子类的对象,那么可以将这个父类强转为子类对象。 2、 子...

网友评论

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

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