java中的向上转型,JAVA向下转型,Java 向上转型和向下转型的详解

java中的向上转型,JAVA向下转型,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的抽象编程思想。

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

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: