什么是Objetc类?
Object是JAVA默认提供的类。
在Java中除了Object类,所有的类都有继承关系,默认会继承Object父类,所有类对象都可以通过Object类进行接收,即向上转型。
Object可以接收任何类
class A{}
class B{}
public class Ob
{
public static void main(String[] args)
{
fun(new A()); //A@15db9742
fun(new B()); //B@6d06d69c
}
public static void fun(Object obj)
{
System.out.println(obj); //可以接收任何类型对象
}
}
取得对象信息
在使用对象直接输出的时候,默认输出的是一个地址编码。如果现在使用的是String类,该类对象直接输出的是内
容,主要原因就是toString()方法的问题。
class Person
{
private String name;
private int age;
public Person(String name,int age)
{
this.name=name;
this.age=age;
}
}
public class Ob
{
public static void main(String[] args)
{
//使用对象输出时,默认是地址编码,如果是String,向上转型后,调用String的toString(),输出的是对象内容
fun(new Person("pick",18)); //Person@15db9742
fun(new String("hello")); //hello
System.out.println(new Person("pick",10));//Person@6d06d69c
}
public static void fun(Object obj)
{
System.out.println(obj); //默认输出对象调用obj.toString();
//等同于 System.out.println(obj.toString());
}
}
默认Object类提供的toString()方法只能够得到一个对象的地址(而这是所有对象都共同具备的特征)。如果默认给出的toString()功能不足(不想输出地址而是输出本类信息),需要在子类中覆写toString()方法。
class Person
{
private String name;
private int age;
public Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString() //覆写toString
{
return this.name+" "+this.age;
}
}
public class Ob
{
public static void main(String[] args)
{
//使用对象输出时,默认是地址编码,如果是String,向上转型后,调用String的toString(),输出的是对象内容
fun(new Person("pick",18)); //pick 18
fun(new String("hello")); //hello
}
public static void fun(Object obj)
{
System.out.println(obj); //默认输出对象调用obj.toString();
}
}
toString()的核心目的在于取得对象信息。
String作为信息输出的重要数据类型,在Java中所有的数据类型只要遇见了String并且执行了"+",那么都要求将其变为字符串后连接,而所有对象要想变为字符串就默认使用toString()方法。
对象比较
class Person
{
private String name;
private int age;
public Person(String name,int age)
{
this.name=name;
this.age=age;
}
public boolean equals(Object ob)
{
//判断obj是否是Person实例,因为Object可以接受所有类的实例
if(!(ob instanceof Person)) //如果形参是null,涵盖在这个条件中,即null不是Person类
{
return false; //obj不是Person实例,直接返回错,两个对象不是一个类就没必要比较
}
if(this==ob) //是同一个对象
return true;
Person p=(Person)ob; //需要向下转型,变回Person类,因为obj里没有Person里的属性
return ((this.name.equals(p.name))&&(this.age==p.age));
}
}
public class Ob
{
public static void main(String[] args)
{
Person p1=new Person("pick",18);
Person p2=new Person("pick",18);
System.out.println(p1.equals(null)); //false
System.out.println(p1.equals(p2)); //true
System.out.println(p1.equals(p2)); //如果没有在Person中覆写equals,将输出false,因为除了equals默认比较的对象地址
}
}
Object接收引用数据类型
Object可以接收所有的引用类型,包括类、数组、接口。
Object 接收数组类型:
public class Ob
{
public static void main(String[] args)
{
//Object接收数组类型
Object ob=new int[]{1,2,3,4,5}; //Object接收引用数据类型
int[] a=(int[]) ob;
for(int num : a)
{
System.out.print(num+"、"); //1、2、3、4、5、
}
}
}
Object接收接口,而Object可以接收接口是Java中的强制要求,因为接口本身不能继承任何类。
interface IA //接口
{
void func();//抽象方法,默认是public 和abstract
}
class AImpl implements IA
{
public void func()
{
System.out.println("hello world");
}
}
public class Ob
{
public static void main(String[] args)
{
IA ia=new AImpl();
Object ob=ia; //Object可以接收接口
System.out.println(ob);//AImpl@15db9742
IA a=(IA)ob; //将Object强转为IA
a.func();//hello world
}
}