1. 在java中一切的类都是以继承的关系存在的,如果现在假设一个类Person 类。
class Person{}
如果一个类定义是没有明确的指明其继承了那个类,则默认继承Object类,也就是说以上的类的定义格式为:
class Person extends Object{}
2. Object类
在java中所有的类都有一个公共的父类就是Object类,一个类只要没有明显的继承一个类,则肯定是Object 类中的子类,
3. toString()方法: 对象打印时调用
举例:
public class Object1 {
public static void main(String[] args) {
Demo demo = new Demo();
System.out.println("加上toString方法" + demo);
System.out.println("不加上toString方法" + demo.toString());
}
}
class Demo{//定义Demo类,实际上就是继承了Object类
}
运行结果:
加上toString方法ZhangRun.club.Demo@785d65
不加上toString方法ZhangRun.club.Demo@785d65
从以上代码可以知道,加和不加toString()方法一样,这说明对象在打印的时候一定会调用toString()方法,是默认调用的。
那么此时就可以利用此操作完成信息的输出。
举例:
public class Object2 {
public static void main(String[] args) {
Person person = new Person("nishuibaichuan",21);
System.out.println("对象信息:" + person);
}
}
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;
}
}
运行结果:
对象信息:姓名:nishuibaichuan:年纪:21
4. equals()方法
equals()方法的主要功能是进行对象的比较操作。
String类本身也是Object类的子类,所以已经覆写了此方法。
举例:
public class Object4 {
public static void main(String[] args) {
Persons persons1 = new Persons("nishuibaichuan",21);
Persons persons2 = new Persons("nishuibaichuan",21);
System.out.println(persons1.equals(persons2)?"是同一人!":"不是同一人!");
System.out.println(persons1.equals("hello")?"是同一人!":"不是同一人!");
}
}
class Persons{
private String name;
private int age;
public Persons(String name,int age){
this.name = name;
this.age = age;
}
public boolean equals(Object obj){
if(this == obj){//地址相等
return true;
}
if(!(obj instanceof Persons)){
return false;
}
Persons persons = (Persons)obj;//向下转型
if(persons.name.equals(this.name) && persons.age == (this.age)){
return true;
}else{
return false;
}
}
public String toString(){//覆写toString方法
return "姓名:" + this.name + ":年纪:" + this.age;
}
}
运行结果:
是同一人!
不是同一人!
Object类是所有类的父类,则所有类的对象都可以使用Object接收,但是Object不光可以接收对象,还可以接收任意的引用数据类型。
5. 使用Object接收接口实例
举例:
public class Object3 {
public static void main(String[] args) {
A a = new B();//向上转型,为接口实例化
Object obj = a;//使用Object接收,向上转型
A x = (A)obj;//向下转型
System.out.print(x.getInfo());
}
}
interface A{
public String getInfo();
}
class B implements A{
public String getInfo(){
return "nishuibaichuan";
}
}
运行结果:nishuibaichuan
6. 数组实际上也可以用Object类进行接收
举例:
public class Object1 {
public static void main(String[] args) {
int t[] = {1,3,5,7};
Object object = t;//使用Object接收数组
print(object);
}
public static void print(Object o){
if(o instanceof int[]){//判断是否为整形数组
int x[] = (int[])o;//强制转换为整形数组
for(int i=0; i<x.length;i++){
System.out.print(x[i] + "\t" );
}
}
}
}
运行结果:1 3 5 7
总结:
(1)Object类是所有类的父类,只要是引用数据类型都可以使用Object进行接收
(2)对象在进行向下转型之前一定要先发生向上转型,要使用instanceof关键字进行判断
(3)toString():对象打印时调用
(4)equals():对象比较时调用
(5)String类也是Object类的子类