JVM如何在java中扩展自定义类的Object类?

时间:2013-07-25 08:15:13

标签: java object

我听说每个类JVM都会隐式扩展,但是有什么需要扩展它,而不扩展Object类,不能为自定义类创建对象?请任何人清楚地解释每个自定义类在其对象创建时会发生什么?

6 个答案:

答案 0 :(得分:6)

Object类包含所有常用方法。因此默认情况下,隐式执行会为您提供那些可以减少开销的常用方法。

方法是 - equals, wait, notify, notifyall, hashcode,getClass,clone etc

如果您需要自定义逻辑,那么override可以method

注意:所有对象(包括数组)都实现Object类的方法。

答案 1 :(得分:1)

默认情况下,要提供此功能,每个类都会扩展Object类。

  • 考虑对象引用的对象类的equals方法 检查它们是否引用相同的对象。如果你不这样做 提供equals()方法的实现,然后是默认方法 也会调用自定义对象。
  • 默认的toString方法提供类名和哈希码 对象。如果不这样做,则不需要单独写一个 想要对象的其他字符串表示。
  • wait(), notify(), notifyAll()这样的方法提供 用于对象的线程通信的功能。所以你的课程 不必在外部进行。他们可以扩展Object课程 功能。

答案 2 :(得分:1)

这个问题的答案与一般的继承思想有关 - 继承的想法是你定义一组适用于所有子类的公共行为。在"对象"中定义的任何内容class可用于您创建的所有类。

它包含一些适用于您在代码中使用的各种信息的内容:

  • equals and hashCode在内部建立平等理论的方法 给定的抽象。

  • toString代表一个人类可读的对象(可能只有 程序员可读的格式。

  • getClass为给定的抽象提供反射功能;    一些组织面向对象运行时的方法。

Java选择使单个类成为所有内容的最终父类,以便有一种简单的方法来传递任意对象,而无需知道其类型(即,您可以使用声明的Object类型来引用类型系统中的每一个项目,甚至是使用其包装类的基元)。但是,有一些OOP语言,例如C ++,其中没有Java中的通用基类。拥有通用基类的另一个好处是,处理超类的逻辑不必专门用于顶级类(通用基类,Object本身除外)。

答案 3 :(得分:0)

Object类为层次结构提供根。这意味着,可以传递对象,并期望对象。

如果您的类没有以某种方式扩展对象,则不能将其视为参数或作为参数传递。这没用。

除此之外,Object类包含非常重要的方法,用于定义Java的许多重要操作。

答案 4 :(得分:0)

在创建类时,您肯定想要创建该类的实例。现在,这些实例必须具有一些特定的和一些基本属性。

这些基本属性是在Object课程中为您准备的。这就是你隐式扩展Object类的原因。

自定义类的特定属性由您在自定义类中定义。

因此,当您创建自定义类的实例(对象)时,则:

1. Object class properties are inherited by your custom class.
2. Your custom class specific properties are alloted to your instance. Hence, now your instance would have custom + Object properties. 

答案 5 :(得分:0)

Object类提供了几乎所有java中对象所需的常用方法

这些Object类的方法,总结如下Accroding to JSL
1.方法克隆用于复制对象 2.方法equals定义了对象平等的概念,它基于价值而非参考,比较 3.方法finalize在对象被销毁之前运行 4.方法hashCode与方法equals在java.util.Hashmap等哈希表中非常有用。
5.方法wait, notify, and notifyAll用于使用线程的并发编程 6.方法toString返回对象的String表示 7.最重要的方法是getClass(),它返回包含
Class对象 关于班级的一些元数据:

name
package
methods
fields
constructors
annotations

所以我们可以说java中的每个对象都是一个相应的Class对象,它包含有关它的元数据,可以在运行时由ClassLoader访问。