java is a like a_JAVA基础——is-a 、have-a、和 like-a的区别

1、is-a,has-a,like-a是什么

在面向对象设计的领域里,有若干种设计思路,主要有如下三种:

is-a、has-a、like-a

java中在类、接口、抽象类中有很多体现。

了解java看这里:什么是Java

了解类和对象看这里:类、对象到底有什么秘密

了解接口和抽象类看这里:接口和抽象类有什么区别

2、is-a是什么

is-a,顾名思义,是一个,代表继承关系。

如果A is-a B,那么B就是A的父类。

一个类完全包含另一个类的所有属性及行为。

例如PC机是计算机,工作站也是计算机,PC机和工作站是两种不同类型的计算机,但都继承了计算机的共同特性。因此在用Java语言实现时,应该将PC机和工作站定义成两种类,均继承计算机类。

了解更多继承看这里:java类的继承有什么意义

3、has-a是什么

has-a,顾名思义,有一个,代表从属关系。

如果A has a B,那么B就是A的组成部分。

同一种类的对象,通过它们的属性的不同值来区别。

例如一台PC机的操作系统是Windows,另一台PC机的操作系统是Linux。操作系统是PC机的一个成员变量,根据这一成员变量的不同值,可以区分不同的PC机对象。

4、 like-a是什么

like-a,顾名思义,像一个,代表组合关系。

如果A like a B,那么B就是A的接口。

新类型有老类型的接口,但还包含其他函数,所以不能说它们完全相同。

例如一台手机可以说是一个微型计算机,但是手机的通讯功能显然不是计算机具备的行为,所以手机继承了计算机的特性,同时需要实现通讯功能,而通讯功能需要作为单独接口,而不是计算机的行为。

5、is-a,has-a,like-a如何应用

如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承。

如果你确定两件对象之间是has-a的关系,那么此时你应该使用聚合;比如电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器、CPU、硬盘这些类聚合成电脑类。

如果你确定两件对象之间是like-a的关系,那么此时你应该使用组合;比如空调继承于制冷机,但它同时有加热功能,那么你应该把让空调继承制冷机类,并实现加热接口。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"a bytes-like object is required"这个错误通常发生在需要字节对象而传递了字符串对象的情况下。字节对象是原始的二进制数据,而字符串对象是文本数据。为了解决这个问题,可以采取以下几种方法之一: 1. 使用.encode()方法将字符串对象转换为字节对象。例如,如果字符串对象为str_data,可以使用bytes_data = str_data.encode()来将其转换为字节对象。 2. 使用b前缀来创建字节字符串。例如,可以使用bytes_data = b"Hello World"来创建一个字节字符串。 3. 如果是读取文件并且需要字节对象,可以使用二进制模式来打开文件。例如,可以使用open("file.txt", "rb")来以二进制模式打开文件。 通过以上方法,就可以成功解决"a bytes-like object is required"的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [成功解决TypeError: a bytes-like object is required, not 'str'](https://blog.csdn.net/qq_41185868/article/details/83833262)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [TypeError: a bytes-like object is required, not ‘str‘,如何解决?](https://blog.csdn.net/Tester_muller/article/details/131534192)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值