基础知识多肽回顾:
1.多肽是方法的多肽,不是属性的多肽(多肽与属性无关)。
2.多肽的存在有三个必要条件:继承、方法重写、父类引用指向子类对象。
3.父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多肽就出现了。

详细举例:

这里有继承,有方法重写,但是缺少父类引用指向子类对象。

class AllAnimal{public void speak(){System.out.println("我们都是动物");}
}class Cat extends AllAnimal{   public void speak(){System.out.println("我是猫");}
}class Fish extends AllAnimal{public void speak(){System.out.println("我是鱼");} public void canDo(){System.out.println("我会游泳");}
}

这样就产生了多肽:父类引用指向子类对象(也是自动向上转型)。

 public static void main(String[] args){AllAnimal a=new Cat();a.speak();     //我是猫}

下面正式讨论向下转型和向上转型:

自动向上转型示例:

//自动向上转型
AllAnimal a=new Fish();
a.speak();   //我是鱼

分析:这里从编译器的角度,首先你要知道编译器是个"笨蛋"!它就认为a就是AllAnimal,它首先会去AllAnimal类中找到speak()方法,发现有这个方法,则编译通过。(实际上a是指向的子类Fish)

向上转型的缺陷:

AllAnimal a=new Fish();
a.canDo();//报错

按照上面所说编译器认为a就是AllAnimal,那么首先会去AllAnimal中找canDo()方法,但是没有找打,这个方法是子类增加的新方法,编译则不通过。

牢牢记住一句话:无论向上向下转型,编译看左边,运行看右边。
意思就是:编译时候左边的对象有没有该方法(不严谨),运行时候看new的对象是谁,就调用谁的方法

为了解决上述问题,引入强制向下转型:

AllAnimal a=new Fish();
a.speak();
//强制向下转型
Fish a1=(Fish)a;
a1.canDo();

由此得到向下转型的意义:父类引用可以使用子类的新增方法了。

Java向下转型的意义详解相关推荐

  1. java的向下转型_浅谈Java向下转型的意义

    一开始学习 Java 时不重视向下转型.一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型. 其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向 ...

  2. Java向下转型的意义

    Java向下转型的意义 一开始学习 Java 时不重视向下转型.一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型. 其实向上转型和向下转型都是很重要的,可能我们 ...

  3. java 委托机制_通过反射实现Java下的委托机制代码详解

    简述 一直对Java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块API public Class Delegater()//空参构造,该类管理委托实例并 ...

  4. java委托机制教程_通过反射实现Java下的委托机制代码详解

    简述 一直对java没有现成的委托机制耿耿于怀,所幸最近有点时间,用反射写了一个简单的委托模块,以供参考. 模块api public class delegater()//空参构造,该类管理委托实例并 ...

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

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

  6. Java中向下转型的意义

    什么是向上转型和向下转型 在Java继承体系中,认为基类(父类/超类)在上层,导出类(子类/继承类/派生类)在下层,因此向上转型的意思就是把子类对象转成父类类型,即将父类的引用指向子类对象:向下转型的 ...

  7. java集合框架史上最详解(list set 以及map)

    title: Java集合框架史上最详解(list set 以及map) tags: 集合框架 list set map 文章目录 一.集合框架总体架构 1.1 集合框架在被设计时需满足的目标 1.2 ...

  8. 精通java图片_面试必备:详解Java I/O流,掌握这些就可以说精通了?

    Java IO概述 IO就是输入/输出.Java IO类库基于抽象基础类InputStream和OutputStream构建了一套I/O体系,主要解决从数据源读入数据和将数据写入到目的地问题.我们把数 ...

  9. Java内存模型(JMM)详解-可见性volatile

    这里写自定义目录标题 Java内存模型(JMM)详解-可见性 什么是JMM JMM存在的意义 为什么示例demo中不会打印 i 的值 如何解决可见性问题 **深入理解JMM内存模型** JAVA内存模 ...

最新文章

  1. C++知识点21——使用C++标准库(再谈string——string的搜索和数值转化)
  2. 面试书上一些题目的整理:O(n)复杂度排序年龄 青蛙跳台阶
  3. 超越ImageNet预训练,Meta AI提出SplitMask,小数据集也能自监督预训练
  4. Qt Creator创建组件
  5. MySQL(三)MySQL索引原理
  6. tshark 小技巧
  7. BCGControlBar入门使用手册
  8. 管理者和领导者的区别_见到一个领导者时如何识别
  9. Oracle中ascii为0的陷阱
  10. xcode cocos2dx 3.x mac工程 当assert(cond)触发断点,但cond却为0
  11. css span 右端对齐_使用 CSS 实现具有方面感知的幽灵按钮
  12. verilog实现多周期处理器之——(五)移动操作(通用数据传送)指令的实现
  13. 闲话目前游戏服务器的开发
  14. java 解析unicode,解析Unicode编码和Java char
  15. windows邮件绑定谷歌邮箱
  16. ul阻燃标准有几个等级_塑料制品中的UL 阻燃等级防火等级划分标准
  17. 【解决】Outlook无法正常显示邮件中的图片
  18. 深度详解新iPad八核GPU
  19. light7ui 刷新子页面 js不能加载的问题
  20. 【b站黑马程序员C++视频学习笔记-继承方式】

热门文章

  1. 【安卓逆向】cannot connect to daemon at tcp:5037: cannot connect to 127.0.0.1:5037: 由于目标计算机积极拒绝,无法连接。 (100
  2. 编程案例——layui的table表格并获取选中的数据、layui监控select下拉框并将隐藏的div显示
  3. 一些点心那种惬意的生活态度
  4. 对比几款目前流行的 Linux 发行版
  5. html图片自适应div
  6. MyBatis-Plus——字段类型处理器TypeHandler
  7. 《思考,快与慢》 读书笔记
  8. 5分钟,客服聊天处理技巧,炉火纯青
  9. CryptoJS实现vue项目路由传参AES加密
  10. MySQL数据库实现本地数据库和远程服务器数据库数据同步