浅谈Java Object类

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()

原文地址:https://www.cnblogs.com/scyq/p/11604478.html

时间: 2024-10-13 03:58:51

浅谈Java Object类的相关文章

浅谈Java工具类CommonUtils的使用

package com.xushouwei.cn; import java.util.HashMap; import java.util.Map; import org.junit.Test; import cn.itcast.commons.CommonUtils; /** * 测试CommonUtils类 * @author Administrator * */ public class CommonUtilsTest { /** * 测试:返回一个随机32位长得字符串 * CommonUt

浅谈java枚举类

先来一段常用枚举类代码结构 public enum Color { //枚举对象 RED(1,"红色"),GREEN(2,"绿色"),BLUE(3,"蓝色"); //私有成员属性 private int index; private String name; //私有构造方法 private Color(int index, String name) { this.index = index; this.name = name; } //公共的g

浅谈java类集框架和数据结构(2)

继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主要有最重要的三种实现:ArrayList,Vector,LinkedList,三种List均来自AbstracList的实现,而AbstracList直接实现了List接口,并拓展自AbstractCollection. 在三种实现中,ArrayList和Vector使用了数组实现,可以认为这两个是

【转】浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初

浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初

浅谈Java中的hashcode方法 - 海 子

浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 一.hashCode方法的作用 对于包含容器类型的程

浅谈Java中的深拷贝和浅拷贝

浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: [java] view plaincopyprint? int apples = 5; int pears = apples; int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float

浅谈 Java 主流开源类库解析 XML

在大型项目编码推进中,涉及到 XML 解析问题时,大多数程序员都不太会选用底层的解析方式直接编码. 主要存在编码复杂性.难扩展.难复用....,但如果你是 super 程序员或是一个人的项目,也不妨一试. Jdom/Dom4j/Xstream... 基于底层解析方式重新组织封装的开源类库,简洁明了的 API,稳定高效的运行表现. Dom4j 基于 JAXP 解析方式,性能优异.功能强大.极易使用的优秀框架.想了解底层解析方式请翻看:浅谈 Java XML 底层解析方式 Jdom 你细看内部代码,

浅谈Java中set.map.List的区别

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 :Collection是最基本的集合接口,声明了适用