Java对象方法详解与重写重载对比

需积分: 0 0 下载量 78 浏览量 更新于2024-08-04 收藏 135KB MD 举报
"面试总结,包括Java基础,如Object类的常用方法、重写与重载的区别" 在Java编程中,Object类是所有类的根类,它定义了一些基础的方法,这些方法在子类中经常被使用或重写。下面我们将详细讨论这些方法以及重写和重载的概念。 1. `getClass()`方法:此方法是一个final方法,意味着不能在子类中被覆盖。它返回对象的运行时Class对象,这在使用Java反射机制时非常有用,因为我们可以获取到对象所属类的信息,如类名、字段和方法等。 2. `hashCode()`方法:这个方法返回对象的散列值,通常基于对象的内存地址。散列值在哈希表(如HashMap)中用于快速查找和定位对象。不同的对象应有不同的散列值,以确保哈希表的高效性。 3. `equals()`方法:该方法用于比较两个对象是否相等。在Object类中,`equals()`和`==`操作符的作用相同,都是比较对象的引用是否指向同一内存位置。但子类通常需要根据业务需求重写`equals()`,以实现基于对象内容的比较。 4. `clone()`方法:这是一个保护方法,用于实现对象的复制。默认情况下,`clone()`执行浅复制,即只复制对象本身,不复制对象内的引用对象。如果要进行深复制(包括引用对象的复制),需要实现`Cloneable`接口并自定义复制逻辑。 5. `toString()`方法:返回对象的字符串表示形式。Object类的默认实现并不友好,通常需要子类覆盖以提供更有意义的字符串输出。 6. `notify()`和`notifyAll()`方法:这两个方法用于多线程编程,它们是final方法,分别用于唤醒在该对象上等待的一个线程(`notify()`)或所有线程(`notifyAll()`)。在使用这些方法前,调用线程必须持有对象的锁。 7. `wait(long timeout)`方法:这个方法让当前线程等待,直到其他线程调用`notify()`或`notifyAll()`,或者达到指定的超时时间。调用线程必须拥有对象的锁,否则会抛出`IllegalMonitorStateException`。 8. `finalize()`方法:这是一个特殊的方法,当垃圾收集器准备回收对象时,会先调用`finalize()`,提供了一次“复活”机会。但不推荐依赖此方法来执行清理操作,因为其行为不确定,且可能导致性能问题。 接下来,我们讨论重写(Override)和重载(Overload)的区别: **重写(Override)**: - 发生在继承关系中,子类对父类已有的方法进行重新定义。 - 方法名、参数列表和返回类型必须完全一致。 - 子类重写的方法访问权限不能低于父类方法(更开放的访问级别)。 - 重写方法不能抛出更严重的检查异常,但可以抛出更轻或无异常。 **重载(Overload)**: - 是一个类内部多态的表现,通过方法名相同但参数列表不同来实现。 - 可以改变参数的数量、类型或顺序,但返回类型与方法名不参与重载判断。 - 重载方法可以有相同的返回类型,只要参数列表不同即可。 理解这些基本概念对于进行Java编程和面试至关重要,它们是构建高效、健壮的Java应用程序的基础。