织梦首饰网站模板,怎么查看网站根目录,渭南微网站建设,网站备案怎么那么麻烦转型是在继承的基础上而言的#xff0c;继承是面向对象语言中#xff0c;代码复用的一种机制#xff0c;通过继承#xff0c;子类可以复用父类的功能#xff0c;如果父类不能满足当前子类的需求#xff0c;则子类可以重写父类中的方法来加以扩展。向上转型#xff1a;子…转型是在继承的基础上而言的继承是面向对象语言中代码复用的一种机制通过继承子类可以复用父类的功能如果父类不能满足当前子类的需求则子类可以重写父类中的方法来加以扩展。向上转型子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口向下转型父类引用的对象转换为子类类型称为向下转型。前者是一个向上转型Animal dog 引用指向new Dog();子类对象当成父类对象只能调用父类的成员如果子类重写了父类的方法就根据这个引用指向调用子类重写的这个方法(这个方法就是覆盖override)。这个调用过程就称为“动态绑定”。转型需要注意的问题向上转型时父类指向子类引用对象会遗失除与父类对象共有的其他方法也就是在转型过程中子类的新有的方法都会遗失掉在编译时系统会提供找不到方法的错误。实例如下public class Animal {public void eat(){System.out.println(animal eatting...);}}class Bird extends Animal{public void eat(){System.out.println(bird eatting...);}public void fly(){System.out.println(bird flying...);}}class Main{public static void main(String[] args) {Animal bnew Bird(); //向上转型b.eat();b.fly(); //此处提示在Animal中没有定义fly方法。在向下转型过程中分为两种情况情况一如果父类引用的对象如果引用的是指向的子类对象那么在向下转型的过程中是安全的。也就是编译是不会出错误的。情况二如果父类引用的对象是父类本身那么在向下转型的过程中是不安全的编译不会出错但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。实例如下public class Girl {public void smile(){System.out.println(girl smile()...);}}class MMGirl extends Girl{Overridepublic void smile() {System.out.println(MMirl smile sounds sweet...);}public void c(){System.out.println(MMirl c()...);}}class main{public static void main(String[] args) {Girl g1new MMGirl(); //向上转型g1.smile();MMGirl mmg(MMGirl)g1; //向下转型,编译和运行皆不会出错mmg.smile();mmg.c();Girl g2new Girl();//MMGirl mmg1(MMGirl)g2; //不安全的向下转型,编译无错但会运行会出错//mmg1.smile();//mmg1.c();if(g2 instanceof MMGirl){MMGirl mmg1(MMGirl)g2;mmg1.smile();mmg1.c();}}总结1、父类引用可以指向子类对象子类引用不能指向父类对象。2、把子类对象直接赋给父类引用叫upcasting向上转型向上转型不用强制转型。如Father father new Son();3、把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting)要强制转型。如father就是一个指向子类对象的父类引用把father赋给子类引用son 即Son son (Son)father其中father前面的(Son)必须添加进行强制转换。4、upcasting 会丢失子类特有的方法,但是子类overriding 父类的方法子类方法有效5、向上转型的作用减少重复代码父类为参数调有时用子类作为参数就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象编程思想。本文转载自https://www.cnblogs.com/fickleness/archive/2013/06/21/3149011.html