我听说每个类JVM都会隐式扩展,但是有什么需要扩展它,而不扩展Object类,不能为自定义类创建对象?请任何人清楚地解释每个自定义类在其对象创建时会发生什么?
答案 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
访问。