Java向上转型和向下转型
来源:互联网 发布:凡科建站申请免费域名 编辑:程序博客网 时间:2024/06/16 09:04
向上转型(upcasting) 、向下转型(downcasting)
范例:有2个类,Father是父类,Son类继承自Father。
Father f1 = new Son(); // 这就叫 upcasting (向上转型)
// 现在f1引用指向一个Son对象(难点)
Son s1 = (Son)f1; // 这就叫 downcasting (向下转型)
向上转型
通俗的将是将子类对象转换成父类对象,此处父类对象也可以是接口。
代码:
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 Human { public void sleep() { System.out.println("Human sleep.."); } } class Male extends Human { public void sleep() { System.out.println("Male sleep.."); } } class Female extends Human { public void sleep() { System.out.println("Female sleep.."); } } public class Main{ public static void main(String[] args) { Animal b=new Bird(); //向上转型 b.eat(); //! error: b.fly(); b虽指向子类对象,但此时丢失fly()方法 dosleep(new Male()); dosleep(new Female()); } public static void dosleep(Human h) { h.sleep(); } }
注意:
Animal b=new Bird(); //向上转型
b.eat();
此处将调用子类的eat()方法。原因:b实际指向的是Bird子类。所以调用时会调用子类本身的方法。那么有人会问为什么不调用fly()方法(因为fly()也是子类Bird的方法),这里因为向上转型时b会遗失除父类对象共有的其他方法,所以fly()被遗失,fly()不再为b所有。
向下转型
与向上转型相反,即是将父类对象转换为子类对象。
代码:
class Girl { public void smile(){ System.out.println("girl smile()..."); } } class MMGirl extends Girl{ @Override public void smile() { System.out.println("MMirl smile sounds sweet..."); } public void c(){ System.out.println("MMirl c()..."); } } public class Main{ public static void main(String[] args) { Girl g1=new MMGirl(); //向上转型 g1.smile(); MMGirl mmg=(MMGirl)g1; //向下转型 mmg.smile(); mmg.c(); } }
Girl g1=new MMGirl(); //向上转型
g1.smile();
MMGirl mmg=(MMGirl)g1; //向下转型
mmg.smile();
mmg.c();
这里的向下转型是安全的。因为g1指向的是子类对象。
阅读全文
0 0
- java 向上转型和向下转型
- java 向上转型和向下转型
- Java 向上转型和向下转型
- java向上转型和向下转型
- java中的向上转型和向下转型
- Java中的向上转型和向下转型
- java中的向上转型和向下转型
- java中的向下转型和向上转型
- Java 向上转型和向下转型
- java向上转型和向下转型
- Java的向上转型和向下转型
- java向上转型和向下转型
- Java 向上转型和向下转型
- Java向上转型和向下转型
- java向上转型和向下转型
- Java-向上转型和向下转型
- java向上转型和向下转型
- java向上转型和向下转型
- Tunnel Warfare HDU
- 个人对juc的一些测试代码
- ReSharper的快捷键
- 题目1007:奥运排序问题
- 后台对前台传入的json数据进行数据类型判断
- Java向上转型和向下转型
- 根据SPI协议进行数据的收发验证
- 信源编码第四次作业-基于LBG的矢量量化算法
- UVa 725
- js加载更多
- .NET Core 事件总线,分布式事务解决方案:CAP
- RxJava 详解
- Myeclipse配置maven
- 第一次上线总结