第04周 预习、实验与作业:类的设计与继承

第04周 预习、实验与作业:类的设计与继承

课前问题列表

一、为什么说Java中的所有类都is-a Object?

在java中所有的类都直接或者间接的继承Object类,所以可以说所有的类都is-aObject类

二、在JDK文档中查找Object的toString方法。说一说,该方法有什么用?使用Eclipse查看Object的toString方法的代码,结合代码说说该代码的用途。

toString方法为Object中的一个方法,它的作用是返回一个表示该对象的的字符串,如果未重写该方法,返回的是该对象的类名 + "@" + 该对象的的hashCode()的16进制表示法的字符串。

如图所示,此为IDEA上Object中的toString方法。

从代码可以看出,Object的toString方法首先使用getClass().getName()获取当前对象的类名,并使用"@"符号连接该类名和接下来的哈希码。哈希码可以通过hashCode()方法获得,用来标识对象的唯一标识符。

通过调用对象的toString方法,可以将对象转换为字符串形式,便于打印输出、日志记录以及调试过程中观察对象的状态和属性。此外,toString方法也常用于在集合类中进行元素的字符串表示,方便理解和调试代码。

总结起来,Object的toString方法用于返回一个表示对象的字符串,提供对象的可读性可识别性

三、在Eclipse中查看Object的equals方法的代码,说说equals的用途。该方法被什么修饰符修饰,意味着什么?什么时候需要覆盖equals方法?结合String类的equals方法说说覆盖如何体现子类特有的特性?

如图为Object中的equals方法。

该代码使用 "==" 运算符来比较两个对象,比较两个对象的引用是否相同。

equals方法被public修饰符修饰,表示它可以在任何地方被访问和调用。

 当我们需要根据对象内部的实际内容来比较,而不仅仅是比较两个对象的引用时就需要我们重写equals方法了。

 

如图为Object中的重写后的equals方法。 

该方法先比较两个对象的引用是否相同,如果相同则直接返回true。如果不相同,但是anObject的运行类型String的话则把它们中的value[]的长度继续比较,如果不同,则返回false。如果相同,则依次比较两个value[]中的字符,如果全部相同则返回true,否则返回false。如果运行类型不是String的话就直接返回fasle。 

通过覆盖equals方法,String类实际上体现了其子类特有的特性,即比较字符串的内容而不仅仅是引用。这使得我们可以在使用String类时,通过equals方法来判断两个字符串是否相等。 

四、如果在子类中想要复用父类的代码,要怎么办?

在子类中复用父类的代码,可以使用Java中的继承机制和关键字super来实现。

首先,在子类的定义中使用关键字extands来继承父类。这样子类就会继承父类的成员(字段和方法),包括父类的构造方法

然后,可以在子类中使用关键字super来访问父类的成员。通过关键字super,可以调用父类的构造方法、访问父类的实例字段和调用父类的实例方法

五、可选:继承是复用代码的唯一方式吗?

1、组合:组合是将多个类的实例嵌套在一起,形成新的类的实例。通过嵌套不同的类实例,可以实现不同层次的功能组合。例如,一个汽车对象可以由引擎、轮胎、座椅等组成,这些部件都是不同的类实例。组合可以实现代码的复用,而且比继承更加灵活。

如图所示:

2、委托:委托是将某个对象的功能委托给其他对象来实现。委托可以通过接口或抽象类来定义,让多个对象来实现。这样,一个对象可以将某些功能交由其他对象来完成,从而实现代码的复用。

3、模板方法:模板方法是将公共的算法流程封装在抽象类或接口中,然后由子类实现具体步骤的算法。在模板方法中,子类只需要实现特定的算法步骤即可。模板方法可以实现代码的复用,同时也符合面向对象编程的开闭原则(对扩展开放,对修改关闭)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值