第四周预习作业

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

在Java中,所有类都是Object类的子类。这是因为Object是Java类层次结构的根类。每个Java类在没有显式指定父类时,默认继承自Object。这意味着每个Java对象都具有Object类的方法,如toString()、equals()和hashCode()等。因此,可以说所有类都“是一个”Object,这为Java提供了统一的对象处理机制。

2. Object的toString方法

在JDK文档中,Object类的toString()方法的定义如下:

public String toString()
 

 用途:
toString()方法用于返回对象的字符串表示。默认实现返回的是对象的类名和对象的哈希码,格式为类名@哈希码。开发者通常会重写此方法,以提供更有意义的信息,方便调试和记录。

Eclipse查看代码:

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

 代码用途分析:
这段代码通过调用getClass().getName()获取类名,并通过hashCode()获取对象的哈希码的十六进制表示,形成对象的默认字符串描述。虽然这个表示不是很直观,但它确保了每个对象都有一个基本的字符串表示。

3. Object的equals方法

在Eclipse中查看Object的equals方法的代码,定义如下:

public boolean equals(Object obj) {
    return (this == obj);
}

用途:
equals方法用于比较两个对象是否相等。默认实现比较的是对象的引用,即是否指向同一个对象。开发者通常会重写此方法,以根据对象的内容进行相等性比较。

修饰符分析:
equals方法被public修饰,意味着它可以被任何其他类调用。

何时覆盖equals方法:
当需要基于对象的属性进行比较时(例如,比较两个Person对象的姓名和年龄),就需要覆盖equals方法。

结合String类的equals方法:
在String类中,equals方法被重写为:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String) anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i]) {
                    return false;
                }
                i++;
            }return true;    }
    }
    return false;
}
 

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

 在子类中,可以通过以下方式复用父类的代码:

使用super关键字: 可以在子类的构造方法中调用父类的构造方法。
直接调用父类的方法: 可以在子类中直接调用父类的公共或保护方法。
例如:

class Parent {
    void display() {
        System.out.println("Parent class method");
    }
}

class Child extends Parent {
    void show() {
        super.display(); // 调用父类的方法
    }
}
 

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

不,继承并不是复用代码的唯一方式。除了继承,还有其他方法可以实现代码复用:

组合(Composition): 通过在一个类中包含另一个类的实例来复用其功能。例如,可以在一个类中使用另一个类的对象作为其成员变量。

接口(Interfaces): 通过实现接口,类可以复用接口定义的方法签名和行为。

工具类: 可以将通用方法封装在工具类中,其他类可以直接调用这些静态方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值