我听说每个类JVM都会隐式扩展,但是扩展它有什么需要,不扩展Object类,就不能为自定义类创建对象?请任何人清楚地解释每个自定义类在创建对象时会发生什么?
6 回答
Object
类包含所有常用方法。因此,默认情况下隐式扩展为您提供了那些减少开销的常用方法。
方法是——equals, wait, notify, notifyall, hashcode,getClass,clone etc
如果您需要自定义逻辑,那么您可以override
使用method
.
注意:所有对象,包括数组,都实现了 Object 类的方法。
为了默认提供这种功能,每个类都扩展了Object
类。
- 考虑
equals
对象类的方法,其中检查对象引用是否引用相同的对象。如果您不提供equals()
方法的实现,那么也会为自定义对象调用默认方法。 - 默认
toString
方法提供对象的类名和哈希码。如果您不想要对象的其他字符串表示形式,则不需要单独编写一个。 - 类似的方法
wait(), notify(), notifyAll()
为对象的线程通信提供功能。因此,您的课程不必在外部进行。他们可以扩展Object
类功能。
这个问题的答案通常与继承的概念有关 - 继承的概念是您定义一组通用的行为,适用于所有子类。“对象”类中定义的任何内容都可用于您创建的所有类。
它包含一些适用于您在代码中使用的每个和平信息的内容:
equals and hashCode
在给定的抽象中建立平等理论的方法。toString
以人类可读(可能只有程序员可读)格式表示对象。getClass
提供对给定抽象的反射能力;一些组织面向对象运行时的方法。
Java 选择使单个类成为所有事物的最终父类,以便有一种简单的方法可以传递任意对象,而无需知道其类型(即,您可以使用声明的 Object 类型来引用每个单独的项目在类型系统中,甚至使用它们的包装类的原语)。但是,有些 OOP 语言(例如 C++)没有像 Java 那样的通用基类。拥有通用基类的另一个好处是处理超类的逻辑不必针对顶级类进行特殊处理(通用基类 Object 本身除外)。
Object
类提供了Java中几乎每个对象都需要的非常常用的方法
这些Object类的方法,总结如下根据JSL :
1.方法clone用于复制一个对象。
2.该方法equals
定义了对象相等的概念,它基于值,而不是引用,比较。
3.该方法finalize
在对象被销毁之前运行
4.该方法hashCode
与equals方法一起在诸如java.util.Hashmap之类的哈希表中非常有用。
5.这些方法wait, notify, and notifyAll
用于使用线程的并发编程。
6.该方法toString
返回对象的字符串表示。
7.最重要的方法是getClass()
返回Class
包含的对象
关于类的一些元数据:
name
package
methods
fields
constructors
annotations
所以我们可以说 java 中的每个对象都是一个相应的Class
对象,其中包含有关它的元数据,可以在运行时由ClassLoader
.
Object
类提供层次结构的根。这意味着,对象可以被传递,也可以被期望。
如果您的类没有以某种方式扩展对象,则不能期望它作为参数或作为参数传递。没用的。
除此之外,Object 类拥有非常非常重要的方法,这些方法定义了 Java 的许多重要操作。
当您创建一个类时,您肯定想要创建该类的实例。现在,这些实例必须具有一些特定的和一些基本的属性。
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.