Java 学习和实践笔记(26):组合(component)的含义以及与继承(extends)的关系

本文探讨了组合和继承在面向对象编程中的角色,强调了组合如何实现代码复用并允许多个属性,同时指出继承适用于is-a关系,而组合更适合has-a关系。作者提倡在设计时考虑逻辑关系,合理运用两者。
摘要由CSDN通过智能技术生成

组合的两个作用:

1)通过将父类对象作为子类的属性

2)通过第1点的作用,实现了代码复用。

示例代码:

public class TestComponent {
    public static void main(String[] args) {
        Student2 s1= new Student2("jason",180,"Java");
        System.out.println(s1.person2.name);
        System.out.println(s1.person2.height);
        System.out.println(s1.major);
    }
}

class Person2 {
    String name;
    int height;
    public void rest(){
        System.out.println("休息!");
    }
}

class Student2 {
    Person2 person2 = new Person2();
    //Person2 是一个引用类型,类似于int这样的类型声明
    // person2 是一个对象、是一个变量、是一个属性,类似于int a 里的a
    //new Person2()作用,就是新建了一个Person2 这个(父)类的对象
    //因为Person2先于Student2,所以叫它为父类
    String major;//专业、
    public void  study(){
        System.out.println("学习!");
        person2.rest();//通过person2这个对象,来使用Person2类中的方法rest()
    }

    public Student2(String name, int height, String major) { //定义一个学生的对象构造器
        this.person2.name = name;//通过person2这个对象,来使用Person2类中的属性name
        this.person2.height = height;//通过person2这个对象,来使用Person2类中的属性height
        this.major = major;
    }
}

运行结果:、

组合比较灵活。继承只能有一个父类,但是组合可以有多个属性。所以,有人声称“组合优于继承,开发中可以不用继承”,但是,不建议大家走极端。
 

对于“is -a”关系建议使用继承,“has-a”关系建议使用组合。所以这里有一个在建模时的逻辑关系的问题。
比如:上面的例子,Student is a Person这个逻辑没问题,但是:Student has a Person就有问题了。这时候,显然继承关系比较合适。
再比如:笔记本和芯片的关系显然是“has-a”关系,使用组合更好。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

复业思维20240108

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值