Java之Object类与instanceof关键字
Object类是所有类的父类:
我们上下代码:
1 package com.learn.chap03.sec14; 2 3 public class A { // 上面类A继承了Object类,因此又可这样定义: public class A extends Object{ 4 /** 5 * object类是所有类的父类 6 */ 7 public A(){ 8 super(); 9 } 10 }
我们可以通过多态,利用重写Object类常用的toString()和equals(Object obj)方法,来完成我们自己的逻辑。
1 package com.learn.chap03.sec14; 2 3 public class People { 4 private String name; 5 6 /** 7 * 构造方法 8 * @param name 9 */ 10 public People(String name) { 11 this.name = name; 12 } 13 14 public String getName() { 15 return name; 16 } 17 18 public void setName(String name) { 19 this.name = name; 20 } 21 22 /** 23 * 重写了Object类的toString()方法 24 */ 25 @Override 26 public String toString() { 27 return this.getName(); 28 } 29 30 /** 31 * 重写了Object类的equals(Object obj)方法 32 */ 33 @Override 34 public boolean equals(Object obj) { 35 String name = ((People)obj).getName(); 36 return this.name == name; 37 } 38 39 public static void main(String[] args) { 40 People p1 = new People("zhangsan"); 41 People p2 = new People("zhangsan"); 42 People p3 = new People("lisi"); 43 //p1.equals(p2); 44 System.out.println("p1.equals(p2):"+p1.equals(p2)); 45 System.out.println("p1.equals(p3):"+p1.equals(p3)); 46 System.out.println(p1); 47 System.out.println(p1.toString()); 48 System.out.println(p2); 49 System.out.println(p2.toString()); 50 System.out.println(p3); 51 System.out.println(p3.toString()); 52 53 } 54 }
运行结果:
p1.equals(p2):true
p1.equals(p3):false
zhangsan
zhangsan
zhangsan
zhangsan
lisi
lisi
instanceof关键字
作用:判断一个对象是否属于一个类
格式: 对象 instanceof 类 (返回布尔型)
向下转型做判断
我们上下代码:
1 package com.learn.chap03.sec15; 2 3 public class Animal { 4 5 public void say(){ 6 System.out.println("我是一个动物!"); 7 } 8 }
package com.learn.chap03.sec15; public class Dog extends Animal{ @Override public void say() { System.out.println("我是一只狗"); } /** * 定义子类方法 */ public void f1(){ System.out.println("狗喜欢啃骨头"); } }
package com.learn.chap03.sec15; public class Cat extends Animal { @Override public void say(){ System.out.println("我是一只猫"); } /** * 定义子类方法 */ public void f2(){ System.out.println("猫喜欢吃鱼"); } }
package com.learn.chap03.sec15; public class Test { /** * 静态方法里面 无法调用非静态方法 下面main方法是静态的,所以doSomeThing方法必须要为静态方法 * @param animal */ public static void doSomeThing(Animal animal){ animal.say(); if(animal instanceof Dog){ // 向下转型做判断,这样下面的代码就会是安全的 ((Dog) animal).f1(); } if(animal instanceof Cat){ // 向下转型做判断,这样下面的代码就会是安全的 ((Cat) animal).f2(); } } public static void main(String[] args) { Animal dog = new Dog(); System.out.println("dog对象是否属于Animal类:"+(dog instanceof Animal)); System.out.println("dog对象是否属于Dog类:"+(dog instanceof Dog)); System.out.println("dog对象是否属于Cat类:"+(dog instanceof Cat)); doSomeThing(new Dog()); doSomeThing(new Cat()); } }
运行结果:
dog对象是否属于Animal类:true
dog对象是否属于Dog类:true
dog对象是否属于Cat类:false
我是一只狗
狗喜欢啃骨头
我是一只猫
猫喜欢吃鱼