版权声明:白小姐 https://blog.csdn.net/bailerong123/article/details/89280990
Object类简介
Object是java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Object父类。即所有类的对象都可以使用我们的Object进行接受。
范例,使用Object接受所有类的对象
package ObjectTest;
class Person{}
class student{}
public class Test {
public static void main(String[] args) {
fun(new Person());
fun(new student());
}
public static void fun(Object obj){
System.out.println(obj);
}
}
运行结果:
ObjectTest.Person@1540e19d
ObjectTest.student@677327b6
所以在开发之中,Object类是参数的最高统一类型。但是Object类也存在有定义好的一些方法
Object类里面的设置好的方法
No | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public Object() | 构造 | 无参构造为子类服务 |
2 | public String toString | 普通 | 取得对象信息 |
3 | public boolean equals(Object obj) | 普通 | 对象比较 |
取得对象信息
在使用对象直接输出的时候,默认输出的是一个地址编码,如果现在使用的是String类,该类对象直接输出的是内容,主要原因就是toString()方法的问题。
覆写toString()方法
package ObjectTest;
class Person {
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
@Override
public String toString() {
return "姓名"+this.name+",年龄"+this.age;
}
}
public class Test {
public static void main(String[] args) {
fun(new Person("lele",25));
fun("hello");
}
public static void fun(Object obj){
System.out.println(obj.toString());
}
}
toString()的核心目的在于取得对象信息
String作为信息输出的重要数据类型,在java中所有的数据类型只要遇见了String并且执行l“+”,那么都将要求变为字符串后链接,而所有对象想要变为字符串就默认使用toString()方法
观察toString()方法
package ObjectTest;
class Person {
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
@Override
public String toString() {
return "姓名"+this.name+",年龄"+this.age;
}
}
public class Test {
public static void main(String[] args) {
String msg="hello"+new Person("lele",25);
System.out.println(msg);
}
}
对象比较
String类对象的比较使用的是equals()方法,实际上String类的equals()方法覆写Object类中的equals()方法。
实现对象比较
package ObjectTest;
class Person {
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
@Override
public String toString() {
return "姓名"+this.name+",年龄"+this.age;
}
@Override
public boolean equals(Object obj) {
if(obj==null)
return false;
if(this==null)
return true;
//如果obj不是person类的对象
if(!(obj instanceof Person))
return false;
Person person=(Person)obj;//向下转型,比较属性值
return this.name.equals(person.name)&&this.age==person.age;
}
}
public class Test {
public static void main(String[] args) {
Person per1=new Person("lele",18);
Person per2=new Person("lele",18);
System.out.println(per1.equals(per2));
}
}
接收引用数据类型
在之前已经分析了Object可以接收任意的对象,因为Object是所有类的父类,但是Object并不会局限于此,它可以接收所有的数据类型:包括:类、数组、接口
public class Test {
public static void main(String[] args) {
Object obj=new int[]{1,2,3,4,5,6};
//向下转型,需要强转
int[] data=(int [])obj;
for(int i:data){
System.out.println(i+"、");
}
}
}
在Object中接收接口
在Object可以接受接口是java中强制要求,因为接口本身不能继承任何类
使用Object’接收接口对象
package ObjectTest;
interface IMessage{
public void getMessage();
}
class MessageImpl implements IMessage{
@Override
public String toString() {
return "pretty";
}
@Override
public void getMessage() {
System.out.println("lele");
}
}
public class Test {
public static void main(String[] args) {
IMessage msg=new MessageImpl();//子类向父接口转型
Object obj=msg;//接口向我们的Object类转型
System.out.println(obj);
IMessage temp=(IMessage) obj;//强制类型转型
temp.getMessage();
}
}