java向上转型与向下转型文档格式.docx

上传人:b****8 文档编号:22631558 上传时间:2023-02-04 格式:DOCX 页数:6 大小:15.79KB
下载 相关 举报
java向上转型与向下转型文档格式.docx_第1页
第1页 / 共6页
java向上转型与向下转型文档格式.docx_第2页
第2页 / 共6页
java向上转型与向下转型文档格式.docx_第3页
第3页 / 共6页
java向上转型与向下转型文档格式.docx_第4页
第4页 / 共6页
java向上转型与向下转型文档格式.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

java向上转型与向下转型文档格式.docx

《java向上转型与向下转型文档格式.docx》由会员分享,可在线阅读,更多相关《java向上转型与向下转型文档格式.docx(6页珍藏版)》请在冰豆网上搜索。

java向上转型与向下转型文档格式.docx

出错,子类引用不能指向父类对象

你或许会问,第1个例子中:

问什么是正确的呢。

很简单因为f1指向一个子类对象,Fatherf1=newSon();

子类s1引用当然可以指向子类对象了。

而f2被传给了一个Father对象,Fatherf2=newFather();

子类s1引用不能指向父类对象。

总结:

1。

父类引用指向子类对象,而子类引用不能指向父类对象。

2。

把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转换。

如:

3。

把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转换。

f1就是一个指向子类对象的父类引用。

把f1赋给子类引用s1即Sons1=(Son)f1;

其中f1前面的(Son)必须加上,进行强制转换。

一、向上转型。

通俗地讲即是将子类对象转为父类对象。

此处父类对象可以是接口。

1,向上转型中的方法调用。

看下面代码:

[java] 

1.package 

com.wensefu.others;

2.public 

class 

Animal 

3. 

public 

void 

eat(){ 

4. 

System.out.println("

animal 

eatting..."

);

5. 

6.} 

7.class 

Bird 

extends 

Animal{ 

8. 

9. 

bird 

10. 

11. 

fly(){ 

12. 

flying..."

13. 

14.} 

15.class 

Main{ 

16. 

static 

main(String[] 

args) 

17. 

b=new 

Bird();

//向上转型 

18. 

b.eat();

19. 

//!

error:

b.fly();

b虽指向子类对象,但此时丢失fly()方法 

20. 

dosleep(new 

Male());

21. 

Female());

22. 

23. 

dosleep(Human 

h) 

24. 

h.sleep();

25. 

26.} 

package 

1.public 

Human 

2. 

sleep() 

sleep.."

5.} 

6.class 

Male 

7. 

@Override 

11.} 

12.class 

Female 

14. 

15. 

17.} 

注意这里的向上转型:

Animalb=newBird();

//向上转型

此处将调用子类的eat()方法。

原因:

b实际指向的是Bird子类,故调用时会调用子类本身的方法。

需要注意的是向上转型时b会遗失除与父类对象共有的其他方法。

如本例中的fly方法不再为b所有。

2,向上转型的好处。

看上面的代码,

publicstaticvoiddosleep(Humanh){

}

这里以父类为参数,调有时用子类作为参数,就是利用了向上转型。

这样使代码变得简洁。

不然的话,

如果dosleep以子类对象为参数,则有多少个子类就需要写多少个函数。

这也体现了JAVA的抽象编程思想。

二、向下转型。

与向上转型相反,即是把父类对象转为子类对象。

com.wensefu.other1;

Girl 

smile(){ 

girl 

smile()..."

MMGirl 

Girl{ 

smile() 

MMirl 

smile 

sounds 

sweet..."

c(){ 

c()..."

g1=new 

MMGirl();

g1.smile();

mmg=(MMGirl)g1;

//向下转型,编译和运行皆不会出错 

mmg.smile();

mmg.c();

g2=new 

Girl();

23.// 

mmg1=(MMGirl)g2;

//不安全的向下转型,编译无错但会运行会出错 

24.// 

mmg1.smile();

25.// 

mmg1.c();

26. 

if(g2 

instanceof 

MMGirl){ 

27. 

28. 

29. 

30. 

31. 

32.} 

Girlg1=newMMGirl();

MMGirlmmg=(MMGirl)g1;

//向下转型,编译和运行皆不会出错

这里的向下转型是安全的。

因为g1指向的是子类对象。

Girlg2=newGirl();

MMGirlmmg1=(MMGirl)g2;

//不安全的向下转型,编译无错但会运行会出错

运行出错:

Exceptioninthread"

main"

java.lang.ClassCastException:

com.wensefu.other1.Girl

atcom.wensefu.other1.Main.main(Girl.java:

36)

如代码所示,可以通过instanceof来防止出现异常。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1