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

组合的两个作用:

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”关系,使用组合更好。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/421244.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Zookeeper4:Java客户端、应用场景以及实现、第三方客户端curator工具包

文章目录 Java连接Zookeeper服务端依赖代码使用 应用场景统一命名服务统一配置管理统一集群管理服务器节点动态上下线理解实现模拟服务提供者【客户端代码】-注册服务模拟服务消费者【客户端代码】-获取服务信息进行请求消费 软负载均衡分布式锁理解实现 生产集群安装N台机器合…

【CV论文精读】【语义分割】【FCN】Fully Convolutional Networks for Semantic Segmentation

FCN–Fully Convolutional Networks for Semantic Segmentation 用于语义分割的全卷积网络 建议参考这篇博客阅读论文 FCN网络解析 0.论文摘要和作者信息 摘要 卷积网络是强大的可视化模型,可以产生特征层次。我们表明,卷积网络本身,经过端…

springboot220基于SpringBoot+Vue的周边游平台个人管理模块的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考。 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项目编号&…

nginx-1.24编译安装

1.创建压缩包存放路径 [rootlocalhost /]# mkdir -p /apps/scripts [rootlocalhost /]# cd apps/scripts/2.上传所需文件 3.初始化环境 [rootlocalhost scripts]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c …

Softmax 回归 + 损失函数 + 图片分类数据集【动手学深度学习v2】李沐动手学深度学习课程笔记

目录 Softmax回归 损失函数 图片分类数据集 Softmax回归从零开始实现 Softmax回归简洁实现 Softmax回归 回归和分类的区别 回归问题举例上节课的预测房价问题,分类问题就是对样本进行分类 回归和分类的具体区别 假设真实的类别为第i个类别(值为1&#x…

springcloud项目,无法在Sentinel Dashboard查看到服务的访问监控信息【解决方法】

1.问题场景 因为warehouse子项目的前端未开发,所以只能通过postman测试接口访问; 2.解决方法 package org.sharetek.common.security.config;import cn.dev33.satoken.SaManager; import cn.dev33.satoken.filter.SaServletFilter; import cn.dev33.sat…

ESP32 web 对接华为云平台--MQTT协议

文章目录 前言一、MQTT协议二、如何使用MQTT协议对接华为云1.注册华为云账号2.设备接入中创建资源空间3.如何连接4.通过MQTT.fx工具做初步对接4.1 设置连接信息4.2 连接平台 5.查看平台设备信息 三. 设备测对接平台1.ESP测引入MQTT库2.编码2.1前端编码修改2.2 后端接口修改 3.M…

如何解决iQOO手机运行uniapp真机调试时无法识别的问题

打开开发者选项,打开USB设置,把默认USB选项改成MIDI模式,就可以检测到手机了

界面控件DevExpress .NET MAUI v23.2新版亮点 - 拥有全新的彩色主题

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多…

Vue.js的双向绑定原理

Vue的双向绑定 vue双向绑定是其最重要的核心亮点,其原理也很简单,这里做个简单总结 vue2的双向绑定是利用的Object.definePropertyvue3的双向绑定是利用的 ES6Porxy中的defineProperty(target, propKey, propDesc 其作用类似于Object.defineProperty …

测试用例术语5.0

一、软件测试中术语 1.动态测试(dynamic testing):通过运行软件的组件或 系统来测试软件 例如:一辆汽车发动并行使测试 2.静态测试(static testing):对组件的规格说明书进行 评审&#xff0c…

超级充电测试负载的核心功能?

超级充电测试负载的核心功能主要包括以下几点: 模拟真实充电场景:超级充电测试负载能够模拟真实的电动汽车充电过程,包括充电设备的启动、停止、故障等状态,以及电动汽车的充电需求变化。通过这种方式,可以对充电设备和…

3月1号代码随想录二叉搜索树中的插入操作

301.二叉搜索树中的插入操作 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 注意,…

机器学习(II)--样本不平衡

现实中,样本(类别)样本不平衡(class-imbalance)是一种常见的现象,如:金融欺诈交易检测,欺诈交易的订单样本通常是占总交易数量的极少部分,而且对于有些任务而言少数样本更…

Linux系统——Shell脚本——一键安装LNMP

#!/bin/bash #安装nginx echo "安装nginx服务" wget http://nginx.org/download/nginx-1.11.4.tar.gz &>/dev/null if [ $? -eq 0 ] thenecho "nginx-1.11.4安装包下载完成"echo "--开始安装必要的依赖文件--"yum install -y gcc gcc-c…

深度学习--神经网络基础(2)

损失函数 在深度学习中, 损失函数是用来衡量模型参数的质量的函数 , 衡量的方式是比较网络输出和真实输 出的差异: 分类 1.多分类损失函数 在多分类任务通常使用 softmax 将 logits 转换为概率的形式,所以多分类的交叉熵损失也叫做 softmax 损失 &…

嵌入式中有关软件开发的错误观念

从学生转变为职业人的过程是很艰难的,因为我们要与自己积累了多年的“老毛病”作斗争,这些“老毛病”包括:做事拖拉、不守时、不遵守规则、怕吃苦等。 就像发射火箭卫星一样,摆脱重力的束缚所花费的燃料是最多的,一旦…

springcloud:3.1介绍雪崩和Resilience4j

灾难性雪崩效应 简介 服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。 原因 1.服务提供者不可用(硬件故障、程序bug、缓存击穿、用户大量请求) 2.重试加大流量(用户重试,代码逻辑重试) 3.服…

STM32标准库开发——BKP备份RTC时钟

备份寄存器BKP(Backup Registers) 由于RTC与BKP关联性较高,所以RTC的时钟校准寄存器以及一些功能都放在了BKP中。TAMPER引脚主要用于防止芯片数据泄露,可以设计一个机关当TAMPER引脚发生电平跳变时自动清除寄存器内数据不同芯片BKP区别,主要体…

【python开发】网络编程(上)

这里写目录标题 一、必备基础(一)网络架构1、交换机2、路由器3、三层交换机4、小型企业基础网络架构5、家庭网络架构6、互联网 (二)网络核心词汇1、子网掩码和IP2、DHCP3、内网和公网IP4、云服务器5、端口6、域名 一、必备基础 &…