Java中特殊的类——Object类

Java中特殊的类——Object

1.Object类的概述

Object类是java默认提供的类。Java中除了Object类,所有的类都是有继承关系的。默认会继承Object类,即所有的对象都可以用Object进行接收

Object类位于java.lang包中,该包中包含着Java最基础和核心的类,在编译时会自动导入。

class Per{}

class Studnet{}

public class TestObject4_14 {

public static void main(String[] args) {

//Object接收所有类的对象

fun(new Per());

fun(new Studnet());

}

public static void fun(Object obj){

System.out.println(obj);

}

}

 

 

 

 

2.Object类中的重要方法

 

Object类是参数的最高统一类型,所以也提供有一些方法。

(1)获得对象信息 public String toString()

class Per{

private String name;

private int age;

public Per(String name, int age) {

super();

this.name = name;

this.age = age;

}

}

public class TestObject4_14 {

public static void main(String[] args) {

//Object接收所有类的对象

fun(new Per("lemon",20));

fun("hello");

}

public static void fun(Object obj){

//Object中默认输出对象调用的就是toString方法

System.out.println(obj.toString());

}

}

class Per{

private String name;

private int age;

public Per(String name, int age) {

super();

this.name = name;

this.age = age;

}

//toString方法的覆写

public String toString() {

return this.name+" "+this.age;

}

}

public class TestObject4_14 {

public static void main(String[] args) {

//Object接收所有类的对象

fun(new Per("lemon",20));

fun("hello");

}

public static void fun(Object obj){

//Object中默认输出对象调用的就是toString方法

System.out.println(obj.toString());

}

}

 

 

 

对于上面的结果,我们不禁会产生疑问:为什么对于字符串中就可以直接输出,而对于对象则输出的一串HashCode?

toString()的核心目的在于取得对象信息。

String作为信息输出的重要数据类型,在java中所有数据类型只要遇到String并且执行了“+”操作,那么都要求先将其变为字符串后再连接,而所有的对象要想变成字符串默认采用toString()方法。

(2)对象比较public boolean equals(Object obj)

所有的类均可以按照自己的需要对equals方法进行覆写这个方法可用来比较两个对象是否“相等”,至于什么才叫“相等”,各个类可以根据自己的情况与需要自行定义。如String,就是要求两个对象所代表的字符串值相等,而对于一个自定义的Per类,则可能是要求姓名、年龄等一样才算是“相等”。

尽管不同的类有不同的规则,但都遵循同一条规则如果两个对象是“一样的,那么它们必然是“相等”(equals)的。那么我们又将什么视为是一样的呢:即a和b指向同一个对象。Object类中的equals方法实施的就是这一条比较原则,对任意非空的指引值a和b,当且仅当a和b指向同一个对象时才返回true。

class Per{

private String name;

private int age;

public Per(String name, int age) {

super();

this.name = name;

this.age = age;

}

//equals方法的覆写

public boolean equals(Object obj) {

if(obj == null){

return false;

}

if(this == obj){

return true;

}

//obj不是Per的实例化对象

if(!(obj instanceof Per)){

return false;

}

Per per = (Per)obj;//向下转型,比较属性值

return this.name.equals(per.name) && this.age == per.age;

}

}

public class TestObject4_14 {

public static void main(String[] args) {

//equals方法

Per per1 = new Per("lemon", 20);

Per per2 = new Per("lemon", 20);

Per per3 = new Per("lemon", 18);

System.out.println(per1.equals(per2));

System.out.println(per1.equals(per3));

}

}

 

 

3.Object接收引用数据类型

在之前我们可发现Object可接受任何的对象,因为Object是所有类的父类,但Object并不局限于接收所有数据类型,还包括:数组、类、接口。

//接口

interface IPerson{

//抽象方法

public void getInfo();

}

class Stu implements IPerson{

public String toString(){

return "我是一名学生";

}

public void getInfo() {

System.out.println("我的专业是数学");

}

}

//Object接收数组

public class TestObject4_14 {

public static void main(String[] args) {

//Object接收数组对象,向上转型

Object obj = new int[]{143,8,9,43};

//强制向下转型

int[] value = (int[])obj;

for(int i : value){

System.out.print(i + " ");

}

System.out.println();

//Object可以接收接口(强制要求),因为接口不能继承任何类

IPerson person = new Stu();//子类向父接口转型

Object obj1 = person;//接口向Object转型

System.out.println(obj1);

IPerson temp = (IPerson)obj1;//强制类型转换

temp.getInfo();

}

}

 

 

总结:

    Object真正达到了参数的统一,如果希望接收所有的数据类型,就用Object了完成。

posted @ 2020-03-30 23:19  edda_huang  阅读(227)  评论(0编辑  收藏  举报