加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

浅谈Java Object类

发布时间:2020-12-15 07:32:17 所属栏目:Java 来源:网络整理
导读:Java Object类 Object类是一个通用类,Java所有的类都是从Object类继承出来的。所以可将创建对象的过程理解为 public class Cars extends Object{ // 继承Object} Object类不是一个抽象类,部分方法是可以被覆盖的。 Object类中有许多有用的方法 equals() 比

Java Object类

  • Object类是一个通用类,Java所有的类都是从Object类继承出来的。所以可将创建对象的过程理解为

    public class Cars extends Object{
        // 继承Object
    }
  • Object类不是一个抽象类,部分方法是可以被覆盖的。

  • Object类中有许多有用的方法

    • equals() 比较两个类是否相等
    • getClass() 告诉你对象是从哪里被初始化的
    • hashCode() 列出此对象的哈希代码
    • toString() 列出类的名称和一个我们不关心的数字
  • Object类的作用
    • 作为多态让方法可以应付多种类型的机制
    • 提供Java在执行期对任何对象都有需要的方法的实现程序代码(让所有类都可以被继承到)

Object类解释多态

// 以下代码是合法的
ArrayList<Car> myCars = new ArrayList<Car>(); // 保存Car的ArrayList
Car BMW = new Car(); // 新建一个Car
myCars.add(BMW); // 装进ArrayList
Car M3 = myCars.get(0) // 将Car赋值给新的Car引用变量
    
// 于是学了Object后会设想,能不能填入Object使其可以保存任意一种ArrayList呢?
// 于是考虑能否这么写代码?
ArrayList<Object> myCars = new ArrayList<Object>();
Car BMW = new Car();
myCars.add(BMW);
// 目前的代码没有问题,但是再做以下操作便会发生问题
Car M3 = myCars.get(0);
// 编译器会报错,为什么呢?
// 放进去的是宝马,但是从ArrayList<Object>取出来的对象都会被当成是Object这个类的实例

这样,我们看下面这一段代码也变得清晰了

// 这一段代码是不合法的
public void go(){
    Dog aDog = new Dog();
    Dog sameDoge = get Object(aDog);
}

public Object getObject(Object o){
    return o;  // 返回的是同一个引用,但是类型已经转换为Object了
}
  • 不难看出,编译器是根据引用类型来判断有哪些method可以调用。详细的说,对象会带有从父类继承下来的所有东西,这一代表每个对象不论实际类型都会是Object的一个实例。所以除了它本身的类型外,也可以当作Object来处理。但是引用的是什么,就只能调用什么!子类里写的新方法就只能引用子类才能调用!

  • 如下代码,十分明显了

    public class Dog{
        void yell(){
            // code
        }
    }
    Dog a = new Dog();
    Object o = a;
    o.equals(a); 
    >>> True
    // 二者的对象类型和地址都是相同的,因为这是赋值而不是在内存上开创空间
    o.yell();
    >>> Wrong
    // 这样会报错,因为引用的是Object类,里面没有yell()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读