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;
}
}