A special class in Java - the Object class

A special class in Java - Object class

1. Overview of the Object class

The Object class is a class provided by default in java. Except for the Object class, all classes in Java are inherited. By default, the Object class will be inherited, that is, all objects can be received by Object

The Object class is located in the java.lang package, which contains the most basic and core classes of Java and is automatically imported at compile time.

classPer{} 

class Studnet{}

public class  TestObject4_14 { 

publicstaticvoid main(String[] args) {  

//Object receives objects of all classes

fun(newPer()); 

fun(new Studnet());

}

publicstaticvoid fun(Object obj){  

System.out.println(obj);

}

}

 

 

 

 

2. Important methods in the Object class

 

The Object class is the highest uniform type for parameters, so it also provides some methods.

(1) Get object information public  String toString () 

class Per{

private String name;

private int age ;  

public Per(String name, intage) { 

super();

this.name = name;

this.age = age;

}

}

public class  TestObject4_14 { 

publicstaticvoid main(String[] args) {  

//Object receives objects of all classes

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

fun("hello");

}

publicstaticvoid fun(Object obj){  

// The default output object in Object calls the toString method

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

}

}

class Per{

private String name;

private int age ;  

public Per(String name, intage) { 

super();

this.name = name;

this.age = age;

}

// Override the toString method

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了完成。

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325963846&siteId=291194637