Java 向上转型和向下转型的详解

本文主要详细介绍Java向上转换和向下转换的相关信息。有需要的朋友可以参考一下。

Java 向上转型和向下转型的详解

转换是基于继承的,继承是面向对象语言中代码重用的一种机制。通过继承,子类可以重用父类的功能。如果父类不能满足当前子类的需求,子类可以重写父类中的方法进行扩展。

向上转型:子类引用的对象到父类类型的转换称为向上转换。通俗地说,就是把子类对象变成父对象。这里的父类对象可以是一个接口。

向下转型:父类引用的对象到子类类型的转换称为向下转换。

前者是向上转化,动物狗引用指向new Dog();作为父类对象,子类只能调用父类的成员。如果子类覆盖了父类的方法,就会根据这个引用指向被子类覆盖的方法(这个方法就是override)。这个调用过程被称为“动态绑定”。

改造中需要注意的问题:

当父类指向子类的引用对象时,会丢失父类共有的其他方法,即在转换过程中,子类的新方法会丢失,系统会提供编译时找不到方法的错误。

例子如下:

公共类动物{

public void eat(){

System.out.println('动物进食.');

}

}

类鸟延伸动物{

public void eat(){

System.out.println('吃鸟.');

}

公共void fly(){

System.out.println('鸟在飞.');

}

}

主类{

公共静态void main(String[] args) {

动物b=新鸟();//向上转换

b . eat();

b . fly();//这里有个提示,Animal中没有定义fly方法。

}

在向下转型过程中,分为两种情况:

情况一:如果父类引用的对象是指向的子类对象,那么在向下转换的过程中是安全的。也就是编译不会有错误。

情况二:如果父类引用的对象是父类本身,那么在向下转换的过程中是不安全的。编译时不会出现错误,但运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免错误之类的错误。

实例如下:

公共课女生{

public void smile(){

System.out.println('少女微笑().');

}

}

MMGirl类扩展女孩{

@覆盖

public void smile() {

System.out.println('女孩的微笑听起来很甜美.');

}

公共void c(){

System.out.println('MMirl c(). ');

}

}

主类{

公共静态void main(String[] args) {

girl G1=new mm girl();//向上转换

G1 . smile();

mm girl mmg=(mm girl)G1;//向下变换,编译运行不会有错误。

mmg . smile();

mmg . c();

少女g2=新少女();

//mm girl mm G1=(mm girl)G2;//不安全的向下转换,编译无错但运行有错。

//mm G1 . smile();

//mmg 1 . c();

MMGirl的g2实例){

mm girl mm G1=(mm girl)G2;

mm G1 . smile();

mm G1 . c();

}

}

总结:

1.父类引用可以指向子类对象,但子类引用不能指向父类对象。

2.将子类对象直接赋给父类引用称为向上转换,向上转换不需要强制转换。

如父亲父亲=新儿子();

3.将指向子类对象的父类引用赋给子类引用称为向下转换,需要强制转换。

例如,父亲是指向子类对象的父类引用,那么将父亲赋给子类引用儿子,即儿子儿子儿子=(儿子)父亲;

必须在父亲前面加上(儿子)进行强制转换。

4.向上转换将丢失子类的唯一方法,但是子类覆盖父类的方法,并且子类是有效的。

5.向上转换的作用,减少重复代码。父类是参数,有时子类作为参数,即使用向上变换。这使得代码简洁。体现了JAVA的抽象编程思想。

感谢您的阅读,希望能帮到您,也感谢您对本站的支持!

原文地址:http://www.ccttoo.com/html/1092.html

本文来自网络,不代表菜鸟教程之家立场,转载请注明出处。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值