Fork me on GitHub

Object类

Object类是所有类的父类,在定义类时,如果没有明确定义继承哪一种类,那就是继承Object类
Object类的三个覆写方法:

  • public String toString() 取得对象信息
  • public boolean equals(Object obj) 对象比较
  • public int hashCode() 取得对象的哈希值

toString() 取得对象信息

默认情况下,直接输出一个对象,会输出对象的编码 但是String类型却不是如此,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Book extends Object{

}
public class testDemo4 {
public static void main(String args[]) {
Object A=new Book();
Object B="xxyxt";
System.out.println(A);
System.out.println(A.toString());
System.out.println(B);
System.out.println(B.toString());
}
}
// 输出结果:
Book@15db9742
Book@15db9742
xxyxt
xxyxt

可以看出:在输出一个对象时,不管调用和toString与否,都会直接输出对象的编码,但是在输出String类的时候,没有输出对象的编码,这是因为,String类中已经覆写了toString方法

下面覆写一个toString()方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class BB{
private double price;
private String name;
public BB(String name,double price) {
this.name=name;
this.price=price;
}
public String toString() {
return "书名:" +this.name + "价格:"+this.price;
}
}
public class testDemo5 {
public static void main(String args[]) {
BB b=new BB("Java从入门到放弃",48.9);
System.out.println(b);

}

}
//输出结果:
书名:Java从入门到放弃 价格:48.9

equals() 对象比较

默认的equals方法比较的是对象的内存地址数值,但是这并不符合真正的对象比较的需要,通过覆写,可以实现对象的比较的标准方法,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Book extends Object{
private String name;
private double price;
public Book(String name,double price) {
this.name=name;
this.price=price;
}
public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(obj==null) {
return false;
}
if(!(obj instanceof Book)) {
return false;
}
Book book=(Book) obj;
if(this.name.equals(book.name) && this.price==book.price){
return true;
}
return false;

}
public String toString(){
return "书名:"+ this.name +"价格:"+this.price;
}
}
public class testDemo4 {
public static void main(String args[]) {
Book b1=new Book("入坑",99.9);
Book b2=new Book("脱坑",0.01);
System.out.println(b1.equals(b2));
}
}

Object类与引用数据类型

Object是所有类的父类,可以接受所有类的对象,同时夜里可以接收所有引用数据类型,包括数组/接口/类
注意:接口不会继承任何类,相应的也不会继承Object类,可以使用Object接收是因为接口是引用数据类型

-------------本文结束感谢您的阅读-------------
Donate comment here