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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值