关于java多态,向上转型,向下转型
首先,java多态是建立在java继承的基础上的,它表现的是同一种行为的不同表现形式,注意,是行为,即多态是java父子类中的方法的一个特性,而不是父子类中的属性的一个特性,比如:
Person p1 = new Student();System.out.println(p1.age)//这里输出的就是父类中age属性的值p1.eat();//这里调用的是Student类中eat的方法,而不是Person类中的eat方法
向上转型:
什么是向上转型呢?向上转型是将子类对象地址赋值给父类对象使用,多态本身就是向上转型的,比如
Person p1 = new Student(); 父类 《— 子类
new Student()开辟了一个新的子类对象空间,之后将这个新的子类对象空间的地址赋值给一个父类对象。
向下转型:
向下转型就是 子类 《—— 父类,也就是:
Student p2 = (Student)p1;
或者
(Student) p1
向下转型是因为当使用java多态时(以上述代码为例),p1只能调用父类Person中存在的方法,不能调用Student中新添加的方法,所以如果想通过多态来调用父类中没有的方法,可以用这样的方式
(Student)p1.study();
//study()方法是Student子类中新添加的方法,父类Person中没有
向下转型要慎用,因为如果转型错误,在编译时并不会报错,但在运行时调用方法的时候会报错,这里java提供了一个双目运算符——instanceof 用来判断某个对象是否为某个类型,返回值为boolean,用法例子如下:
Person p1 = new Student(); if(p1 instanceof Person){System.out.println("p1对象为Person类的一个实例");}if(p1 instanceof Student){System.out.println("p1对象为Student类的一个实例");}String s1 = "sfsd";if(s1 instanceof String){System.out.println("这是一个String类的对象");}
运行结果如下:
这里如果p1写成如下形式:
Person p1 = new Person();if(p1 instanceof Person){System.out.println("p1对象为Person类的一个实例");}if(p1 instanceof Student){System.out.println("p1对象为Student类的一个实例");}
结果如下:
关于java多态,向上转型,向下转型相关推荐
- Java从入门到放弃09---多态/向上转型/向下转型/多态内存图/抽象类/关键字abstract不能和哪些关键字共存/接口/类与类,类与接口,接口与接口的关系/抽象类与接口的区别
Java从入门到放弃09-多态/向上转型/向下转型/多态内存图/抽象类/关键字abstract不能和哪些关键字共存/接口/类与类,类与接口,接口与接口的关系/抽象类与接口的区别 01 多态 多态指的是 ...
- Java多态中的 向上转型/向下转型
Java 向上转型和向下转型的详解 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法 ...
- java的多态性和向下转型
java的多态性和向下转型 java对象引用的详解 父类的引用调用子类的属性(向下转型) instanceof关键字的用法 文章内容选自尚硅谷,采用的java8环境 java对象引用的详解 有关jav ...
- Java 中的上转型和下转型
在我们的日常中,上转型和下转型都使用的比较少,所以当别人问起来什么是上转型,什么是下转型,自己往往一片模糊,或者不能将他们进行明显的区分. 在这里,我将以我个人理解来论述上下转型,希望对大家有帮助,如 ...
- java 除法向上,向下取整
向上取整用:Math.ceil(double a)向下取整用:Math.floor(double a) int a = 7;int b = 5;BigDecimal aBig = new BigDec ...
- Java接口,多态,向上转型,向下转型的意义
接口 官方解释: Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现 ,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 包含 ...
- JAVA中多态以及向上转型向下转型、重写的讲解
重写 重写(override):也称为覆盖.重写是子类对父类非静态.非private修饰,非final修饰,非构造方法等的实现过程 进行重新编写, 注意!!!返回值和形参都不能改变. 重写的好处在于子 ...
- java:多态详解,以及对象的向上和向下转型
大家好,兔胆包天我又来啦,今天给大家分享的是多态,多态最主要的是父类引用指向子类对象,还是老办法,直接上代码,代码中注解的很详细哦. 这是第一个代码: //测试多态 public class Anim ...
- JAVA多态(向上转型)与RTTI向下转型
多态 late-binding, 在编译前不确定 函数调用和哪个具体实现绑定 在程序运行期间,再决定函数调用和哪个具体实现绑定. /** polymorphism*/ class S{public S ...
- 类.接口.多态.向上转型.向下转型
一:综述 电脑利用USB接口实现键盘的输入.鼠标的移动 二:代码 USB.java package ClassAndObject;public interface USB {public abstra ...
最新文章
- 压力变动力,存储追求高效率
- [ZJOI2011]礼物
- 多重循环 ——— 打印九九乘法表 || 经典的打印金字塔(打印整个金字塔 打印空心金字塔 打印空心菱形金字塔)
- 关于C#数据类型的一点认识
- 计算机考研四大金刚,“四大金刚”考研一个都不少
- ansible命令参数介绍
- SAP UI5:如何处理resource not found for the segment XXXXX error message
- python异步io 队列_python 学习笔记九 队列,异步IO
- [新闻]MacBook Pro新版上市
- python3识别条码_python3转换code128条形码的方法
- redhat下升级gcc编译器
- 红芯事件追踪:官方致歉承认基于开源架构;创始人履历被指夸大
- C++ OS 网络 数据库 (面试)
- 《Shell脚本学习指南》
- NekoHTML学习笔记
- [Java]Axis需要高版本的J2sdk:j2sdk-1_4_2_08
- Go语言使用之File操作
- Android 5.1 添加下拉通知栏数据流量开关快捷图标
- 电源纹波怎么测量,纹波和噪声的区别
- 音频特效生成与算法 3
热门文章
- js html路径乱码,如何把js获取url中文乱码转码
- js设计模式与绘制UML图 - 打车的面试题
- 文件和目录中的 . 与 .. 与 / 表示含义
- php对接小鹅通API开发高级实战案例解析:获取指定资源学习记录信息(单人单学习记录、单人多学习记录累计、返回数据格式确认)
- Hystrix之服务降级
- 电梯安全物联网设备让电梯更加的智慧
- 什么是死锁?死锁产生的原因?如何避免死锁?
- python鼠标事件包括哪几种_python-在Tkinter中列出鼠标悬停事件函数
- IT界流传的经典段子,最后一个只有程序员才能看懂
- VGG16网络模型的原理与实现