java向上转型与向下转型文档格式.docx
- 文档编号:22631558
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:6
- 大小:15.79KB
java向上转型与向下转型文档格式.docx
《java向上转型与向下转型文档格式.docx》由会员分享,可在线阅读,更多相关《java向上转型与向下转型文档格式.docx(6页珍藏版)》请在冰豆网上搜索。
出错,子类引用不能指向父类对象
你或许会问,第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来防止出现异常。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 向上 转型 向下
![提示](https://static.bdocx.com/images/bang_tan.gif)