Java中所有类默认继承Object类,Object中toString和euqals这两个方法是我们常用的(我只学了这两个*-*)
toString
当对象对应的类没有定义自己的toString函数时,会调用Object的toString函数,输出结果为【包名.类名@对象的地址】
public class Main{
public static void main(String[] args){
Test t = new Test(10);
t.print();
System.out.println(t.toString());
}
}
class Test{
private int number = 0;
public Test(int number)
{
this.number = number;
}
public void print()
{
System.out.println("Test");
}
}
结果:
Test
hello.Test@1c4af82c
在如上代码中,可以看见我们并没有定义toString函数,这个函数是Test在定义时自动继承toString的。
或许我们可以手动写一个自己的toStirng,但在eclipse中,有许多强大的功能可以帮助我们完成任务(偷懒)
在需要添加toStirng函数的类中(比如在Test的代码区域)右击,选择生成toString()
可以选择本类中有的字段,也可以选择继承的类的toString()方法。
public class Main{
public static void main(String[] args){
Test t = new Test(10);
t.print();
System.out.println(t.toString());
}
}
class Test{
private int number = 0;
public Test(int number)
{
this.number = number;
}
public void print()
{
System.out.println("Test");
}
//设置好后eclipse自动帮我们生成的代码
@Override
public String toString() {
return "Test [number=" + number + ", toString()=" + super.toString() + "]";
}
}
结果:
Test
Test [number=10, toString()=hello.Test@1c4af82c]
当我们不止继承Object类,当我们有要重写的类有除了Object类的其他父类的时候也可以选择调用它的toString()函数【除非父类中定义了toString(),否则还是调用的Object类的toString()】
equals
和toString差不多的操作(在Test类中右击)
这个对话框的作用是查看子类从父类中继承了哪些方法,可以对它们进行覆写
public class Main{
public static void main(String[] args){
Test t = new Test("123");
Test t1 = new Test("123");
t.print();
System.out.println(t.equals(t1));
}
}
class Test{
private String testStr;
public Test(String testStr)
{
this.testStr = testStr;
}
public void print()
{
System.out.println("Test");
}
//下面是通过eclipse自动生成的对继承的equals方法进行的覆写↓↓↓
@Override //Override(覆写)可以没有,不过它是语法规范(方便阅读),最好加上
public boolean equals(Object obj) { //标明下面的方法是父类的覆写,方法的参数的必须和父类完全相同
Test tc = (Test)obj; //否则就是两个同名的不同的函数
return testStr.equals(tc.testStr);
}
}
结果:
Test
true
将重写的equals注释掉之后的结果:
Test
false
这是因为Obejct的equals函数判断的是两个对象是否指向同一快空间
【必须(t1 = t)的情况下才能为true,这种情况下就需要我们自己重写equals方法了】