第04周 类的设计与继承

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

在 Java 中,所有的类都直接或间接继承自java.lang.Object类。当一个类没有显式地指定继承某个父类时,它默认继承自Object类。这就意味着任何一个 Java 类都具有Object类的特性和方法,所以可以说 Java 中的所有类都 “is - a”(是一个)Object。

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

toString方法的用途:

  • toString方法返回一个表示该对象的字符串。默认情况下,它返回的字符串格式为 “全限定类名 @对象的哈希码的十六进制表示”。例如,对于一个MyClass类的实例,默认的toString方法可能返回
    “com.example.MyClass@12345678”。
  • 通常会在调试或日志记录时使用该方法,以便快速了解对象的基本信息。也可以在需要将对象转换为字符串表示的场景中使用,比如将对象作为参数 传递给需要字符串的方法,或者将对象显示在用户界面上。

在 Java 中,Object类的toString方法的默认实现代码如下:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

用途:

  • getClass().getName()获取当前对象的类名,这样可以在字符串中明确表示对象所属的类。
  • Integer.toHexString(hashCode())将对象的哈希码转换为十六进制字符串表示,哈希码可以在一定程度上唯一标识一个对象(但不同的对象可能有相同的哈希码)。这个组合的字符串提供了一个关于对象的基本描述,在没有重写toString方法的情况下,可以让开发者快速识别对象的类型和内存中的大致位置。

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

  • equals方法的用途:
  • equals方法用于比较两个对象是否相等。在Object类中,默认的equals方法比较的是两个对象的引用是否相等,即是否指向同一个内存地址。
  • 通常会根据具体的业务需求在自定义类中重写equals方法,以便按照特定的属性或条件来判断两个对象是否相等。
  • equals方法的修饰符及意义:

equals方法在Object类中是public修饰的,这意味着可以在任何地方访问这个方法。

  • 什么时候需要覆盖equals方法:

当需要按照对象的状态而不是引用地址来判断两个对象是否相等时,就需要覆盖equals方法。例如,如果一个表示人的类,可能希望根据人的身份证号、姓名等属性来判断两个Person对象是否相等,而不是仅仅比较它们的引用地址。

  • 结合String类的equals方法说说覆盖如何体现子类特有的特性:

在String类中,重写了equals方法,它比较的是两个字符串的内容是否相等。这体现了子类根据自身的特性(字符串的内容比较)来覆盖父类的通用比较方法(引用比较)。通过这种方式,String类的equals方法可以满足特定的业务需求,即比较字符串的实际内容而不是引用地址。

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

调用父类的构造方法:在子类的构造方法中,可以使用super()来调用父类的无参构造方法,或者使用super(参数列表)来调用父类的有参构造方法。这样可以在创建子类对象时,先初始化父类的部分。
使用super关键字调用父类的方法:在子类的方法中,可以使用super.方法名(参数列表)来调用父类中被覆盖的方法。这样可以在子类方法中复用父类的特定方法实现。

5.继承是复用代码的唯一方式吗?

继承不是复用代码的唯一方式。在 Java 中,还有以下几种方式可以实现代码复用:

组合(Composition): 组合是通过在一个类中包含另一个类的对象来实现代码复用。 接口实现(Interface
Implementation): 多个类可以实现同一个接口,每个类可以根据自身的需求实现接口中的方法,从而实现代码复用的灵活性。
委托(Delegation): 将某些任务委托给其他对象来完成,类似于组合,但更强调行为的委托。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值