首先,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多态,向上转型,向下转型相关推荐

  1. Java从入门到放弃09---多态/向上转型/向下转型/多态内存图/抽象类/关键字abstract不能和哪些关键字共存/接口/类与类,类与接口,接口与接口的关系/抽象类与接口的区别

    Java从入门到放弃09-多态/向上转型/向下转型/多态内存图/抽象类/关键字abstract不能和哪些关键字共存/接口/类与类,类与接口,接口与接口的关系/抽象类与接口的区别 01 多态 多态指的是 ...

  2. Java多态中的 向上转型/向下转型

     Java 向上转型和向下转型的详解 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法 ...

  3. java的多态性和向下转型

    java的多态性和向下转型 java对象引用的详解 父类的引用调用子类的属性(向下转型) instanceof关键字的用法 文章内容选自尚硅谷,采用的java8环境 java对象引用的详解 有关jav ...

  4. Java 中的上转型和下转型

    在我们的日常中,上转型和下转型都使用的比较少,所以当别人问起来什么是上转型,什么是下转型,自己往往一片模糊,或者不能将他们进行明显的区分. 在这里,我将以我个人理解来论述上下转型,希望对大家有帮助,如 ...

  5. java 除法向上,向下取整

    向上取整用:Math.ceil(double a)向下取整用:Math.floor(double a) int a = 7;int b = 5;BigDecimal aBig = new BigDec ...

  6. Java接口,多态,向上转型,向下转型的意义

    接口 官方解释: Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现 ,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 包含 ...

  7. JAVA中多态以及向上转型向下转型、重写的讲解

    重写 重写(override):也称为覆盖.重写是子类对父类非静态.非private修饰,非final修饰,非构造方法等的实现过程 进行重新编写, 注意!!!返回值和形参都不能改变. 重写的好处在于子 ...

  8. java:多态详解,以及对象的向上和向下转型

    大家好,兔胆包天我又来啦,今天给大家分享的是多态,多态最主要的是父类引用指向子类对象,还是老办法,直接上代码,代码中注解的很详细哦. 这是第一个代码: //测试多态 public class Anim ...

  9. JAVA多态(向上转型)与RTTI向下转型

    多态 late-binding, 在编译前不确定 函数调用和哪个具体实现绑定 在程序运行期间,再决定函数调用和哪个具体实现绑定. /** polymorphism*/ class S{public S ...

  10. 类.接口.多态.向上转型.向下转型

    一:综述 电脑利用USB接口实现键盘的输入.鼠标的移动 二:代码 USB.java package ClassAndObject;public interface USB {public abstra ...

最新文章

  1. 压力变动力,存储追求高效率
  2. [ZJOI2011]礼物
  3. 多重循环 ——— 打印九九乘法表 || 经典的打印金字塔(打印整个金字塔 打印空心金字塔 打印空心菱形金字塔)
  4. 关于C#数据类型的一点认识
  5. 计算机考研四大金刚,“四大金刚”考研一个都不少
  6. ansible命令参数介绍
  7. SAP UI5:如何处理resource not found for the segment XXXXX error message
  8. python异步io 队列_python 学习笔记九 队列,异步IO
  9. [新闻]MacBook Pro新版上市
  10. python3识别条码_python3转换code128条形码的方法
  11. redhat下升级gcc编译器
  12. 红芯事件追踪:官方致歉承认基于开源架构;创始人履历被指夸大
  13. C++ OS 网络 数据库 (面试)
  14. 《Shell脚本学习指南》
  15. NekoHTML学习笔记
  16. [Java]Axis需要高版本的J2sdk:j2sdk-1_4_2_08
  17. Go语言使用之File操作
  18. Android 5.1 添加下拉通知栏数据流量开关快捷图标
  19. 电源纹波怎么测量,纹波和噪声的区别
  20. 音频特效生成与算法 3

热门文章

  1. js html路径乱码,如何把js获取url中文乱码转码
  2. js设计模式与绘制UML图 - 打车的面试题
  3. 文件和目录中的 . 与 .. 与 / 表示含义
  4. php对接小鹅通API开发高级实战案例解析:获取指定资源学习记录信息(单人单学习记录、单人多学习记录累计、返回数据格式确认)
  5. Hystrix之服务降级
  6. 电梯安全物联网设备让电梯更加的智慧
  7. 什么是死锁?死锁产生的原因?如何避免死锁?
  8. python鼠标事件包括哪几种_python-在Tkinter中列出鼠标悬停事件函数
  9. IT界流传的经典段子,最后一个只有程序员才能看懂
  10. VGG16网络模型的原理与实现