Java中的所有类都是从Object这个类继承出来的,Object类是所有类的源头,是所有类的父类

Object类

在Java中的所有类都是从Object这个类继承出来的,Object类是所有类的源头,是所有类的父类。
你可以想象自己写的类是这样声明的:

public class Dog extends Object {}

Object类的部分方法:

1.
equals(Object o)   //判断是否相等

Dog a = new Dog();
Cat c = new Cat();
boolean b = a.equals(c);   //false

2.
getClass()

Cat c = new Cat();
System.out.println(c.getClass());    //class cat ,告诉你此对象是从哪里被初始化的

3.
hasCode()
Cat c = new Cat();
System.out.println(c.hasCode());   //  8202111 ,列出此对象的哈希代码,你可以把它想象成一个唯一的ID

4.
toString()
Cat c = new Cat();
System.out.println(c.toString());   //列出类的名称和一个我们不关心的数字

关于Object类的几点说明:

  • Object类不是抽象类
  • Object类的部分方法可以被覆盖,被标记为final的方法不能被覆盖,强烈建议用自己写的类去覆盖掉hashCode(),equals(),toString()
  • ArrayList方法是通用的,入参或返回类型为object,ArrayList<Dog>是用于限制它的类型,表明此ArrayList受限只能保存Dog对象,在java5.0之前无法限制它的类型。
  • Object类有两个主要的目的,作为多态让方法可以应付多种类型的机制,以及提供Java在执行期对任何对象都有需要的方法的实现程序代码(让所有的类都会继承到)

使用Object类型的多态引用的代价:

  • 任何从ArrayList取出的东西都会被当作Object类型的引用而不管它原来是什么,编译器无法将此对象识别为Object以外的事物。
  • 编译器只管引用的类型,而不是对象的类型,编译器是根据引用类型来判断有哪些method可以调用,而不是根据Object确实的类型
public void go() {
	Dog d = new Dog();
	Dog a = getObject(d);  //这是错误的,无法过关,虽然返回了同一个Dog,但编译器认为这只能赋值给Object类型的变量
}

public Object getObject(Object o) {
	return o;  //返回了同一个引用,但类型已经转换为Object了
}

如何将Object类转换为原来的类型

ArrayList<Object> myDogs = new ArrayList<Object>();
Dog d = new Dog();
Dog a = (Dog) mydogs.get(0)

如果你真的确定它是个Dog,可以使用(Dog)将类型转换为Dog.
如果你不能确定它是Dog,可以使用instanceOf这个运算符来检查,若是类型转换错了,你会在执行期遇到ClassCastException异常并且终止。

if (o instance of Dog) {
	Dog a = (Dog) o;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Java ,所有父类都是 java.lang.Object 。 在 Java Object 是所有的根,它是所有的祖先,并且是所有父类。所有其他是从 Object 派生的。 举个例子,如果你定义了一个,例如 MyClass,那么 MyClass 的父类就是 Object,并且 MyClass 就是 Object 的子。这意味着 MyClass 继承Object 的所有属性和方法。 例如,Object 有一个 toString() 方法,它返回对象的字符串表示形式。如果你定义了一个 MyClass,并且希望使用 toString() 方法来输出 MyClass 的实例,你就可以在 MyClass 重写 toString() 方法,从而使用自定义的表示形式输出 MyClass 的实例。 总之,所有 Java 父类都是 java.lang.Object 。 ### 回答2: 在Java,所有父类ObjectObjectJava所有的根,即所有的终极父类。无论是Java的内置还是我们自定义的,它们都直接或间接地继承ObjectObjectJava的基础库的一部分,它提供了一些通用的方法来处理对象,这些方法包括: 1. equals()方法:用于判断两个对象是否相等。 2. hashCode()方法:用于获取对象的哈希码。 3. toString()方法:用于返回对象的字符串表示。 4. getClass()方法:用于获取对象的运行时。 5. wait()、notify()和notifyAll()方法:用于实现线程之间的等待和通知机制等。 由于所有继承Object,因此所有都可以使用这些方法。此外,Object还提供了一些其他的方法,如clone()方法、finalize()方法等。 使用Object作为所有父类,可以使得我们在编写代码时更加方便灵活。例如,当我们需要传递一个对象型的参数时,可以统一使用Object型,以适应各种型的对象。同时,Object还提供了一些通用的方法,能够满足一些基本的需求。当然,如果我们需要更多的功能和特性,可以通过自定义来扩展Object,以满足具体的需求。总而言之,ObjectJava扮演着至关重要的角色,是所有的根基。 ### 回答3: 在Java,所有父类是`Object`。`Object`Java语言的顶级,即所有的终极父类。由于所有都直接或间接地继承自`Object`,因此在所有的Java程序,我们都可以调用`Object`定义的共有方法。 `Object`包含了一些常用的方法,包括`equals()`用于比较对象是否相等,`hashCode()`用于获取对象的哈希值,`toString()`用于返回对象的字符串表示等,这些方法在所有都可以直接使用。 由于所有继承自`Object`,因此我们可以在任何一个的定义使用`super`关键字来引用`Object`的成员或调用`Object`的方法。此外,如果我们在自定义的没有显式地声明一个父类,那么默认情况下这个都会隐式地继承自`Object`。 总之,在 Java,所有父类都是`Object`,它提供了每个都可以使用的常用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值