java多态让我觉得比较绕的就应该是向上转化跟向下转化了。

一、向上转化

class Father {private int money;  public int getMoney() {return money; }public void setMoney(int money) {this.money = money; }public void printInfo() {System.out.println("This is Father");}}class Son extends Father{public void printInfo() {System.out.println("This is son");}public void playGame() {System.out.println("playGame ...");}}class Daughter extends Father{public void printInfo() {System.out.println("This is daughter");}}public class Cnv4 {public static void main (String args[]) {Father f = new Father();Son s = new Son();Daughter d = new Daughter();print(f);print(s);print(d);}public static void print(Father f) {f.printInfo();}}

向上转化:我的理解是,父类有可继承的方法A B 子类 甲中有A(覆写的) B(覆写的) C。 子类乙中有 A(覆写的) B(覆写的) D。子类丙中有 A(覆写的) B(覆写的) E。类似上上面的例子,如果共同调用父类中的函数呢?
是不是应该

public class Cnv3 {public static void main (String args[]) {Father f = new Father();Son s = new Son();Daughter d = new Daughter();print(f);print(s);print(d);}public static void print(Father f) {f.printInfo();}public static void print(Son s) {s.printInfo();}public static void print(Daughter d) {d.printInfo();}}

这样写呢?这样应该算作重载。我们使用多态就可以使用这个中向上转化,来调用父类中共有的,如果子类中覆写了,那么就去调用子类中的。是不是让代码更加整洁简单?

二、向下转化

class Father {private int money;  public int getMoney() {return money; }public void setMoney(int money) {this.money = money; }public void printInfo() {System.out.println("This is Father");}public void drink() {System.out.println("drink ...");}}class Son extends Father{public void printInfo() {System.out.println("This is son");}public void playGame() {System.out.println("playGame ...");}}class Daughter extends Father{public void printInfo() {System.out.println("This is daughter");}public void dance() {System.out.println("dance ...");}}public class Cnv5 {public static void main (String args[]) {Father f = new Father();Son s = new Son();Daughter d = new Daughter();printAction(f);printAction(s);printAction(d);}public static void printAction(Father f) {if (f instanceof Son) {Son son = (Son)f;son.playGame();}else if (f instanceof Daughter) {Daughter d = (Daughter)f;d.dance();}else if (f instanceof Father) {f.drink();}}}

想要在一个函数中调用父类中没有的函数,那么使用的办法就是先向上转化然后在使用向下转化。我们在向上转化之后,再向下转化时候要判断是哪一个子类,然后才能转化,这时候我们使用的就是 instanceof .
对于这种多态方式,就是知道有这么个好用的东西就行了,需要的时候打开过来再看看该怎么用就好。知识不是非要干死脑细胞,装在脑子里才叫知识。随着年纪增大,步入社会,有了家庭,更应该采用更加有效的方式学习累积。

JAVA进阶day04多态(向上转化,向下转化)相关推荐

  1. 【零基础学Java】—对象的向上和向下转型(二十七)

    [零基础学Java]-对象的向上转型(二十七) 对象的向上转型,其实就是多态的写法 格式:父类名称 对象名=new 子类名称(): 含义:右侧创建一个子类对象,把它当做父类来看待使用 注意事项:向上转 ...

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

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

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

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

  4. 接口--多态(向上造型--向下造型)

    *接口:            有时,我们需要从多个不相关的类中设计出一个子类型,而java继承是单继承的特点,无              法满足我们的需求,            所以,我们可以使 ...

  5. java 除法运算,向上与向下取整和四舍五入

    public static void main(String[] args) {double d1 = 17;double d2 = 3;double result = d1 / d2;/*** 四舍 ...

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

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

  7. 第三次学JAVA再学不好就吃翔(part35)--多态向上转型和向下转型

    学习笔记,仅供参考 文章目录 面向对象 多态 多态向上转型和向下转型 多态的好处和弊端 面向对象 多态 多态向上转型和向下转型 我们首先通过以下代码复习一下自动类型提升和强制类型转换: class B ...

  8. Java面向对象:多态——基于继承的向上转型、方法重写、动态绑定

    Java面向对象:多态 1.多态的概念 2.向上转型和向下转型 (1)向上转型 (2)向下转型 3.方法重写 4.动态绑定与静态绑定 5.多态的优缺点 ======================== ...

  9. java接口和多态应用例题_Java基础进阶 第四天 抽象接口多态

    今日任务: 1,能够独立使用抽象类 2,能够独立使用多态 3,能够独立使用接口 4,能够理解适配器设计模式 1. 抽象类 1.1. 抽象类的产生 需求:创建类描述猫和狗的行为: 猫的行为:抓老鼠:吃鱼 ...

最新文章

  1. Percona XtraBackup备份到恢复记录
  2. 制药行业验证过程中的偏差如何处理?
  3. zabbix 4.0.3 use docker-compose deploy
  4. 飞机上为啥禁止使用手机?
  5. JavaScript高级应用(二)
  6. 工大附中、铁一太牛了,2019年高分段人数令人震惊!
  7. 百度、头条、网易 Android 等社招面试题目
  8. mysql字段数值累加_mysql字段值(字符串)累加 | 学步园
  9. 汇编语言 计算ffff:0006单元中的数乘以3,结果存在dx中
  10. JVM内存管理------GC算法精解(复制算法与标记/整理算法)
  11. java关闭websocket_关闭代码1006关闭websocket的原因
  12. 你应该要掌握的7种回归分析方法
  13. nxos启动的初始化和https访问nx-api
  14. c语言 傲娇的十六进制,语言拟人向:来自Python、JAVA、C语言的“傲娇”自我介绍...
  15. go - const
  16. [Bzoj2049][Sdoi2008]Cave 洞穴勘测
  17. 【linux】nmap命令使用
  18. oracle客户端odbc安装程序,Oracle Instant Client ODBC 安装说明
  19. 计算机组成与结构1800题,最新版数据结构1800题含完整答案详解.doc
  20. java手机下载软件_山寨手机java软件怎么下载?

热门文章

  1. 微生物 研究_微生物监测如何工作,为何如此重要
  2. leetcode 674. 最长连续递增序列
  3. leetcode剑指 Offer 11. 旋转数组的最小数字(二分查找)
  4. 动画电影的幕后英雄怎么说好_幕后编码面试-好与坏
  5. figma下载_如何在Figma中创建逼真的3D对象
  6. pdf.js浏览中文pdf乱码的问题解决
  7. MarkDown语言
  8. Pycharm社区版配置Django
  9. js call,apply,bind三个方法的区别
  10. how to use webpart container in kentico