java向上转型与向下转型详解

2023-05-16 0 4,889

本文实例大家分享了java向上转型与向下转型的具体代码,供大家参考,具体内容如下

基础知识Java中的继承机制使得一个类可以继承另一个类,继承的类称为子类,被继承的类称为父类。在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象,所以子类可以继承父类中所有的属性和方法,包括private修饰的属性和方法,但是子类只是拥有父类private修饰的属性和方法,却不能直接使用它,也就是无法直接访问到它(子类可以通过调用父类的public声明的get方法来获取父类的private属性和private方法)。同时子类可以对继承的方法进行重写(@Override),并且新建自己独有的方法。

1.向上转型:

父类 : class Fruit {}
子类 : class Apple extends Fruit{}

创建向上转型对象 fruit ;
Fruit fruit = new Apple();
Apple 向上转型为父类
如果 Apple 中有重写父类方法,fruit 对象默认调用子类中重写方法

注意 :

fruit 可以直接访问子类重写方法。
fruit 不能直接访问子类私有方法、子类所有属性。
fruit 可以通过重写方法调用子类私有方法和属性
fruit 重写方法中调用方法和属性顺序 : 子类 -> 父类

其他 : 关于重写的返回值类:如果方法的返回类型是 void
和基本数据类型,则返回值重写时不可修改。但是如果方法的返回值是引用类型,重写时是可以返回该引用类型的子类的。

2.向下转型

注意 : 只有向上转型过的对象才能向下转型

向下转型为恢复子类所有功能。

Apple apple = (Apple) fruit;

3.(多态)作用

减少编程代码

例 : 一个方法调用三种子类

public class Demo {
    public static void run(Fruit fruit){
        fruit.show();
    }
    public static void main(String[] args) {
        run(new Apple());
        run(new Orange());
        run(new Banana());
    }
}

abstract class Fruit{
    abstract void show();
}

class Apple extends Fruit{
    @Override
    public void show(){
        System.out.println(\"apple\");
    }
}

class Orange extends Fruit{
    @Override
    public void show(){
        System.out.println(\"orange\");
    }
}

class Banana extends Fruit{
    @Override
    public void show(){
        System.out.println(\"banana\");
    }
}

再进行向上转型

public class Demo {
    public static void run(Fruit fruit){
        fruit.show();

        if(fruit instanceof Apple){
            Apple apple = (Apple) fruit;
            apple.eatApple();
        }else if(fruit instanceof Orange){
            Orange orange = (Orange) fruit;
            orange.eatOrange();
        }else{
            Banana banana = new Banana();
            banana.eatBanana();
        }
    }
    public static void main(String[] args) {
        run(new Apple());
        run(new Orange());
        run(new Banana());
    }
}

abstract class Fruit{
    abstract void show();
}

class Apple extends Fruit{
    @Override
    public void show(){
        System.out.println(\"apple\");
    }

    public void eatApple(){
        System.out.println(\"吃了一个apple\");
    }
}

class Orange extends Fruit{
    @Override
    public void show(){
        System.out.println(\"orange\");
    }

    public void eatOrange(){
        System.out.println(\"吃了一个orange\");
    }
}

class Banana extends Fruit{
    @Override
    public void show(){
        System.out.println(\"banana\");
    }

    public void eatBanana(){
        System.out.println(\"吃了一个banana\");
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 java向上转型与向下转型详解 http://www.20zxx.cn/706016/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务