黑马程序员技术交流社区

标题: 关于object类的问题 [打印本页]

作者: Qiubang    时间: 2016-1-28 18:10
标题: 关于object类的问题
所有的类都是继承自object类吗,那么所有类都可以使用object类的方法吗,
可以重写他的方法吗,




作者: 梁志斌    时间: 2016-1-28 18:18
应该都可以,Object中的方法貌似就那几个,常用的tostring getclass等
作者: yi651312197    时间: 2016-1-28 18:55
是可以的
作者: diaokb    时间: 2016-1-28 19:05
一、概述:
       Object类是所有Java类的祖先。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类。
      可以使用类型为Object的变量指向任意类型的对象。
      Object类有一个默认构造方法pubilc Object(),在构造子类实例时,都会先调用这个默认构造方法。
      Object类的变量只能用作各种值的通用持有者。要对他们进行任何专门的操作,都需要知道它们的原始类型并进行类型转换。例如:
      Object obj = new MyObject();
      MyObject x = (MyObject)obj;

二、API预览
    Object()
    默认构造方法
    clone()
    创建并返回此对象的一个副本。
    equals(Object obj)
    指示某个其他对象是否与此对象“相等”。
    finalize()
    当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
    getClass()
    返回一个对象的运行时类。
    hashCode()
    返回该对象的哈希码值。
    notify()
    唤醒在此对象监视器上等待的单个线程。
    notifyAll()
    唤醒在此对象监视器上等待的所有线程。
    toString()
    返回该对象的字符串表示。
    wait()
    导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
    wait(long timeout)
    导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。
    wait(long timeout, int nanos)
    导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。

三、方法使用说明
1、equals()方法:用于测试某个对象是否同另一个对象相等。它在Object类中的实现是判断两个对象是否指向同一块内存区域。这中测试用处不大,因为即使内容相同的对象,内存区域也是不同的。如果想测试对象是否相等,就需要覆盖此方法,进行更有意义的比较。例如
class Employee{
... //此例子来自《java核心技术》卷一
    public boolean equals(Object otherObj){
        //快速测试是否是同一个对象
        if(this == otherObj) return true;
        //如果显式参数为null,必须返回false
        if(otherObj == null) reutrn false;
        //如果类不匹配,就不可能相等
        if(getClass() != otherObj.getClass()) return false;
        
        //现在已经知道otherObj是个非空的Employee对象
        Employee other = (Employee)otherObj;
        //测试所有的字段是否相等
        return name.equals(other.name)
            && salary == other.salary
            && hireDay.equals(other.hireDay);
    }
}
Java语言规范要求equals方法具有下面的特点:
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
从这里看出,上面的例子是Java规范的equals方法的标准实现,推荐用上面例子的写法实现类的equals方法。

2、toString():返回该对象的字符串表示。Object类中的toString()方法会打印出类名和对象的内存位置。几乎每个类都会覆盖该方法,以便打印对该对象当前状态的表示。大多数(非全部)toString()方法都遵循如下格式:类名[字段名=值,字段名=值...],当然,子类应该定义自己的toString()方法。例如:
public String toString(){
    reurn "Employee[name=" + name + ",salary=" + salary + ",hireDay=" + hireDay + "]";
}
toString()方法是非常重要的调试工具,很多标准类库中的类都定义了toString()方法,以便程序员获得有用的调试信息。

四、来自SUN公司的java.long.Object类的API文档,网上有chm中文版的,很好找。
作者: 划江北上    时间: 2016-1-28 22:23
都是继承他的,都是可以使用里边的方法的,但是只是一个最终的类而且后边的都重写他的方法的,因为最初的基本上没有什么卵用的
作者: 谁的苍茫    时间: 2016-1-28 22:34
在Java中所有的类都是继承自object类,即使你没有去继承Java也会默认的帮你继承,既然继承了object类,那object类中的方法子类当然可以使用也可以重写,并且我们推荐子类重写父类的方法,像toString(),equals(),等等这些方法都是要重写的,因为object定义的是所有的类都有的功能,但是这个功能可能是你想要的,但是呢内容不是你想要的,所以你要去重写,比如toString(),object默认打印包名加类名+哈希码,这可能与你想要的结果不符合,所以你要重写
作者: 858009904    时间: 2016-1-28 23:32
可以重写啊!这样子类的功能就变的强大了啊!
作者: Mayer    时间: 2016-1-29 09:36
同楼上的
作者: qiujunwen123    时间: 2016-1-29 10:53
可以所有的类的老祖宗就是NSObject可以重写父类的方法。
作者: j6819236    时间: 2016-1-29 11:09
只要Object中类的方法没有被私有,或者被 final修饰,都是可以被重写。当遇到不熟悉的类,建议查API文档.

API 1.6汉化版  百度云盘:http://pan.baidu.com/s/1jHbBSEE


作者: 西贝    时间: 2016-1-29 11:37
是Object类,可以继承,可以重新方法
作者: 西贝    时间: 2016-1-29 11:38
j6819236 发表于 2016-1-29 11:09
只要Object中类的方法没有被私有,或者被 final修饰,都是可以被重写。当遇到不熟悉的类,建议查API文档.

A ...

你在逗笑么,Object是所有类的父类,怎么可能私有或者被final修饰,疯特了么
作者: 刺客015    时间: 2016-1-29 16:35
Object类是所有类的上帝  耶稣。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。 在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类。       可以使用类型为Object的变量指向任意类型的对象。       Object类有一个默认构造方法pubilc Object(),在构造子类实例时,都会先调用这个默认构造方法。       Object类的变量只能用作各种值的通用持有者。要对他们进行任何专门的操作,都需要知道它们的原始类型并进行类型转换。
作者: fagug    时间: 2016-1-29 22:19
object类是根类
作者: 858009904    时间: 2016-1-29 22:43
可以重写啊,基本都要重写object类的方法!这样子类的功能才会更强大!
作者: Qiubang    时间: 2016-1-29 23:26
858009904 发表于 2016-1-29 22:43
可以重写啊,基本都要重写object类的方法!这样子类的功能才会更强大!

哦哦,今天刚学,懂了
作者: ma464526717    时间: 2016-1-30 22:15
所用的类都继承object类,所有的累都可以使用object类的方法。
作者: 酱油    时间: 2016-1-30 23:39
按照毕老师的话说,Object是上帝,,,其他所有类都是他的子民,都继承于他!
作者: 858009904    时间: 2016-2-4 22:33
Qiubang 发表于 2016-1-29 23:26
哦哦,今天刚学,懂了

学的挺快的啊!赞!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2