Java 面向对象 之 Object 类

http://www.verejava.com/?id=16992832835152

/**
    知识点: Object 类

    注意:
        1. Object 是所有类的根类, 也就是说所有类默认都继承Object 只是省略没有写
        2. 当 println()输出一个对象的时候 自动调用了 Object的 toString() 方法
        3. Object toString() 方法返回的是 : 类名+@+16进制的哈希码hashCode地址
            哈希码 代表对象的内存地址,所以如果比较两个对象的引用相等==必须 哈希码相等
        4. Object equals(Object obj) 方法比较的也是引用内部是以==实现的
        5. String 对象的equals()方法怎么是比较内容了?
        6. 如果要equals()比较两个对象的内容相等我们需要复写equals 方法
        7. 当Object的子类复写了 toString() 方法, println()输出时调用子类复写的 toString() 方法
        8. 如果复写了equals()方法,为了保证对象相等哈希码hashcode必须相等的特性,
           我们也要复写hashCode()方法使保持对象的一致性
        9. Object 可以接收任意引用数据类型(类,数组,接口)

    回顾知识点:
        1. 如果一个类定义了带参数的构造方法, 当用不带参数的构造方法调用时,java
           虚拟机不会自动生成默认的构造方法,必须得手动显示定义不带参数的默认构造方法。
*/
public class TestObject
{
    public static void main(String[] args)
    {
        //实例化一个 Student
        Object p=new Student("李明");
        Student p2=(Student)p;
        Student p3=new Student("张涛");
        Student p4=new Student("李明");
        System.out.println(p);
        System.out.println(p==p2);
        System.out.println(p3);
        System.out.println(p.equals(p3));
        System.out.println(p==p4);
        System.out.println(p.equals(p4));
        System.out.println(p);
        System.out.println(p4);

        Person p5=new Student("李明");
        System.out.println(p4.equals(p5));

        String[] p6=new String[1];
        p6[0]="李明";
        System.out.println(p4.equals(p6));
    }
}
interface Person
{
    /**
        什么人可以说话
    */
    public void say();
}
class Student extends Object implements Person
{
    private String name;

    public Student()
    {
    
    }

    public Student(String name)
    {
        this.name=name;
    }

    public String getName()
    {
        return this.name;
    }

    public void say()
    {
        System.out.println("学生会说英语");
    }
    

    public boolean equals(Object obj)
    {
        //如果地址都相等, 两个对象肯定相等
        if(this==obj)
        {
            return true;
        }
        //判断是否是 Student 对象实例
        if(obj instanceof Student)
        {
            //将obj向下转型成 Student
            Student p=(Student)obj;
            //如果内容相等返回true
            if(this.name.equals(p.getName()))
            {
                return true;
            }
        }
        return false;
    }

    public int hashCode()
    {
        return this.name.hashCode();
    }
    
    public String toString()
    {
        return this.name;
    }
    
}

http://www.verejava.com/?id=16992832835152

猜你喜欢

转载自www.cnblogs.com/verejava/p/9202006.html
今日推荐