Java中可以使用instanceof关键字判断一个对象到底是哪一个类的实例
格式:对象 instance 类 返回 boolean类型
通过子类实例化的对象同时是子类和父类的实例,无论是直接声明子类还是声明了父类,然后再通过子类向上转型
如果直接通过父类实例化本类对象,则一定不是子类的实例
//=================================================// File Name : ploy_up_demo//------------------------------------------------------------------------------// Author : Common// 类名:C_1// 属性:// 方法:class C_1{ // 定义接口C_1 public void fun1(){ //定义fun1()方法 System.out.println("C_1--->public void fun1"); } public void fun2(){ //定义fun2()方法 this.fun1(); }}//类名:D_1//属性://方法:class D_1 extends C_1{ //子类D_1继承父类C_1 public void fun1(){ System.out.println("D_1--->public void fun1"); //覆写父类中的fun1()方法 } public void fun3(){ System.out.println("D_1--->public void fun3"); //子类自己定义方法 }}//类名:E_1//属性://方法:class E_1 extends C_1{ //子类E_1继承父类C_1 public void fun1(){ System.out.println("E_1--->public void fun1"); //覆写父类中的fun1()方法 } public void fun5(){ System.out.println("E_1--->public void fun3"); //子类自己定义方法 }}//主类//Function : 对象的多态性,对象向上转型public class ploy_up_demo { public static void main(String[] args) { // TODO 自动生成的方法存根// D_1 b = new D_1(); //定义子类的实例化对象// C_1 a = b; //声明一个父类,发生向上转型的关系,子类赋值给父类// a.fun1(); //此方法被子类覆写过,虽然a是父类,但是调用的是子类的fun1()方法 // C_1 c = new D_1(); //声明一个父类,发生了向上转型,子类赋值给父类// D_1 d = (D_1)c; //声明的父类强制转换成子类,发生了向下转型关系// d.fun1();// d.fun2();// d.fun3(); // fun(new C_1()); //传递C_1类的实例,产生向上转型// fun(new D_1()); //传递D_1类的实例,产生向上转型 C_1 a = new D_1(); //发生向上转型 System.out.println("C_1 a = new D_1():"+(a instanceof C_1)); System.out.println("C_1 a = new D_1():"+(a instanceof D_1)); C_1 a_1 = new C_1(); //声明一个父类 System.out.println("C_1 a = new C_1():"+(a_1 instanceof C_1)); System.out.println("C_1 a = new C_1():"+(a_1 instanceof D_1)); D_1 a_2 = new D_1(); //声明一个子类 System.out.println("D_1 a = new D_1():"+(a_2 instanceof C_1)); System.out.println("D_1 a = new D_1():"+(a_2 instanceof D_1)); } public static void fun(C_1 c){ //接收父类对象,不用写多次分别接收子类对象 c.fun1(); }}