本文共 2735 字,大约阅读时间需要 9 分钟。
向上转型就是子类的对象赋给父类的引用或(父类的引用指向子类的对象)。例如人和男人的关系,男人属于人,人不仅仅只包含男人,还包含女人。
举例: 父类class Person { public void eat(){ System.out.println("吃饭"); } public void sleep(){ System.out.println("睡觉"); }}
子类:
class Woman extends Person{ public void eat(){ System.out.println("女人少吃饭"); } public void work(){ System.out.println("女人负责貌美如花"); }}class Man extends Person{ public void eat(){ System.out.println("男人多吃饭"); } public void work(){ System.out.println("男人负责赚钱养家"); }}
测试类(向上转型):
public class TestDemo{ public static void main(String[] args) { System.out.println("Person父类*************"); Person p=new Person(); p.eat(); p.sleep(); System.out.println("向上转型****************"); //向上转型(多态)子类的对象赋给父类的引用(父类的引用指向子类的对象) Person p1=new Man();//向上转型 p1.eat();//当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法 ---虚拟方法调用 //p1.work; // 有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型 //编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。 }}
a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false。注意:如果 a instanceof A返回true,则 a instanceof B也返回true.其中,类B是类A的父类。
举例:
测试类(向下转型)及instanceof关键字的使用:public class TestDemo{ public static void main(String[] args) { System.out.println("Person父类*************\t"); Person p=new Person(); p.eat(); p.sleep(); System.out.println("向上转型****************\t"); //向上转型(多态)子类的对象赋给父类的引用(父类的引用指向子类的对象) Person p1=new Man();//向上转型 p1.eat();//当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法 ---虚拟方法调用 //p1.work; // 有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型 //编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。 System.out.println("向下转型****************\t"); //向下转型:子类对象被父类引用之后,再把父类引用强转成子类,强转时叫做向下转型。 Man m=(Man)p1;//向下桩型 m.work(); m.eat(); System.out.println("instanceof关键字使用******\t"); if(p1 instanceof Woman){ Woman w1 = (Woman)p1; w1.work(); System.out.println("******Woman******"); } if(p1 instanceof Man){ Man m2 = (Man)p1; m2.work(); System.out.println("******Man******"); } if(p1 instanceof Person){ System.out.println("******Person******"); } if(p1 instanceof Object){ System.out.println("******Object******"); } }}
转载地址:http://xerpi.baihongyu.com/