您的位置:首页 > 编程语言 > Java开发

Java之向上转型,向下转型简单理解和实例

2016-11-26 22:08 513 查看

开心一笑

【我吓唬他要分手,他一边看足球一边哼哼哈哈地说:“分吧分吧,东西和钱都归你,我什么也不要,只要你走的时候别忘了带上我就行。】

视频教程

大家好,我录制的视频《Java之优雅编程之道》已经在CSDN学院发布了,有兴趣的同学可以购买观看,相信大家一定会收获到很多知识的。谢谢大家的支持……

视频地址:http://edu.csdn.net/lecturer/994

提出问题

java中的向上转型,向下转型简单理解???

解决问题

转型基础:有继承关系。

向上转型(upcasting):将子类对象转为父类对象。父类对象可以是接口。(儿子当爸爸)向上转型时,子类的新有的方法都会遗失掉。

向下转型(downcasting):父类引用的对象转换为子类类型,需要强转。(爸爸当儿子)

女神类:

/**
* 描述:女神
* @author Ay
*
*/
class Girl extends Person{

public Girl(){};

public Girl(String name){
super(name);
};

public Girl(String id,String name){
super(id, name);
}

public void dress(){
System.out.println("Girl" + "打扮......");
}

public static void birth(){
System.out.println("Girl" + "降临人世间......");
}

public static void die(){
System.out.println("Girl" + "走向人间天堂......");
}

}


Person类:

/**
* 描述:人类
* @author Ay
*
*/
class Person extends Object{

protected String UNIQUE_FLAG = "Person";

public Person(){
System.out.println("Person created......");
};

public Person(String id,String name){
super(id,name);
}

public Person(String name){
super(name);
}

public static void birth(){
System.out.println("降临人世间......");
}

public static void die(){
System.out.println("走向人间天堂......");
}

}


测试类:

public class AyTest {

public static void main(String[] args){

Person person = new Person();
//向上转型
Person girl = new Girl();
girl.birth();
//报错,向上转型子类的新有的方法都会遗失掉
//girl.dress();
//第一种:向下转型
Girl downCastingGril = (Girl)girl;
//女孩呼吸  正常运行
downCastingGril.breath();
//女孩打扮,正常运行
downCastingGril.dress();
//这里运行就会报错,报ClassCastException异常
Girl errorGirl = (Girl)person;
//运行错误
errorGirl.breath();
//运行错误
errorGirl.dress();

}
}


运行结果:

Person created......
Person created......
降临人世间......
Person呼吸......
Girl打扮......
Exception in thread "main" java.lang.ClassCastException: com.evada.de.Person cannot be cast to com.evada.de.Girl
at com.evada.de.AyTest.main(AyTest.java:27)


向上转型,静态绑定

public class AyTest {

public static void main(String[] args){
Person person = new Person();
//向上转型
Person girl = new Girl();
//这里是静态绑定,打印结果是:降临人世间...... 而不是 Girl降临人世间......
girl.birth();
}
}


打印结果:

Person created......
Person created......
降临人世间......


向上转型,动态绑定

就是正常的动态绑定,可参考:Java之前期绑定,后期绑定,简单理解和实例

参考文章

【1】java向上转型和向下转型

【2】Java入门记(二):向上转型与向下转型

【3】Java编程思想(Thinking in Java)

【4】java向上转型与向下转型

读书感悟

来自《浮生六记》沈复

越是不见,越是想见。越是想见,越是不敢。

情之所钟,虽丑不嫌。

从此扰扰攘攘,又不知梦醒何时耳。

你的过去我来不及参与,你的未来我不会再错过。 归纳起来不外乎四个字: 相见恨晚。

我吓唬他要分手,他一边看足球一边哼哼哈哈地说:“分吧分吧,东西和钱都归你,我 什么也不要,只要你走的时候别忘了带上我就行。”

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: