【1.3 对象的向上转型和向下转型】

  • + -

    向上转型

    子类对象赋值给父类类型的引用时 会自动将子类对象对应的类型

    提升为父类类型

    语法:

    父类类型 引用 = new 子类的构造方法();

    特点:

    此时 该引用只能调用父类中所有可见的属性和方法

    不能调用子类特有的属性和方法

    向下转型

    将父类对象引用强制转为子类类型的过程

    语法:

    子类类型 引用 = (子类类型)父类对象引用;

    特点:

    1.此时 该引用可以调用子类特有的方法,同时还可以调用从父类中继承过来的所有方法

    2.在进行强制类型转换之前,一定要使用instanceof关键字判断一下 否则运行时很容易抛出"ClassCastException" 类型强制转换异常

    java.lang.ClassCastException 类型制转转换异常;

    【instanceof 运算符】 用来在运行时 指出对象是否是特定类型的一个实例

    【instanceof 语法】: 对象  instanceof  类型

    【结果是boolean类型】:

    true: 对象属于该类型

    false: 对象不属于该类型

    • + -

      /* Animal1 c = new Cat1(); //有个人来给你爸爸去讲课 讲电工培训,

      但爸爸不在,我又想挣这钱,就易容成我爸爸,

      show(c);//然后去讲课,我只会讲java培训,问讲的是什么课?

      还是Java因为实际讲课人是我;

      Dog1 dd =(Dog1 ) d;//现在女友来找逛街,

      但我此时还是易容成我爸爸的样子,

      现在偷偷要去卸妆才出来

      * dd.show2();//然后和女友逛街

      */

      /*

      一个儿子经过化妆成了父亲,但他实际上还是儿子,

      那么他做的事(行为),是儿子做的呢?还是父亲做的呢?

      显然还是儿子,化了妆的儿子,必须先从'父亲'卸妆成儿子

      ,才能干儿子特有的事(行为)

      */

      • + -

        public static void main(String[] args) {

        Animal1 c = new Cat1();

        show(c);

        /*ClassCastException" 类型强制转换异常

        Day11.Dog1 cannot be cast to Day11.Cat1 Day11。

        狗1不能被扔到Day11.Cat1

        Dog1  dd  = (Dog1) d;

        show(d);*/

        Animal1 d =  new Dog1();

        show(d);

        Animal1 p = new Pig1();

        show(p);

        }

        public static void show(Animal1 tmp){//1.进来的是Animal1的引用

        tmp.eat();

        // Cat1 t = (Cat1) tmp;//(向下转型 )2.转成Cat1的引用

        // t.show1();//3.再调Cat1特有的功能

        if(tmp instanceof Cat1){//如果tmp进来的是猫就

        Cat1 t = (Cat1) tmp;

        t.show1();

        }else if(tmp instanceof Dog1){//否则 如果进来的是狗就

        Dog1 d =(Dog1) tmp;

        d.show2();

        }else if(tmp instanceof Pig1){

        Pig1 p =(Pig1) tmp;

        p.show3();

        }

        }

        • package Day11;

          public class Test_03 {

          public static void main(String[] args) {

          // Manager m =new Manager("000","小");

          // m.work();

          // m.managerwork();

          Employee manager = new Manager("001", "张三丰");

          Employee sales = new Sales("002", "欧拉");

          Test_03 boss =new Test_03();

          boss.show(manager);

          boss.show(sales);

          }

          public static void show(Employee tmp) {// 在Main里普通方法要加static

          System.out.println("工号" + tmp.getWorkId());

          tmp.work();

          if (tmp instanceof Manager) {

          Manager m = (Manager) tmp;

          m.managerwork();

          // tmp.setName("黎经理");

          // ((Manager) tmp).managerwork();

          } else if (tmp instanceof Sales) {

          Sales n = (Sales) tmp;

          n.sale();

          // tmp.setName("黄经理");

          // ((Sales) tmp).managerwork();

          }

          }

          }

          class Employee {

          private String workId;// workid

          private String name;

          public Employee() {// 无参构造没有void只有public

          super();// 不写也是默认存在的

          }

          public Employee(String workId, String name) {

          super();// 不写也是默认存在的

          this.workId = workId;

          this.name = name;

          }

          public void setWorkId(String workId) {

          this.workId = workId;

          }

          public String getWorkId() {

          return workId;

          }

          public void setName(String name) {

          this.name = name;

          }

          public String getName() {

          return name;

          }

          public void work() {

          System.out.println("员工都要开会!");

          }

          }

          class Manager extends Employee {// 经理

          public Manager() {// 无参

          super();

          }

          public Manager(String workId, String name) {// 有参

          super(workId,name);

          }

          public void managerwork() {

          System.out.println("经理[" + getName() + "],管理普通员工");

          }

          }

          class Sales extends Employee {// 销售

          public Sales() {// 无参

          super();

          }

          public Sales(String workId, String name) {// 有参

          super(workId,name);

          }

          public void sale() {

          System.out.println("销售部的[" + getName() + "],销售业绩排第一");

          }

          }

Day11多态部分-6 【1.3 对象的向上转型和向下转型】相关推荐

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

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

  2. 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货

    –本文摘要–     1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者.     2.本文的内容摘要:讲述Java中的一 ...

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

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

  4. 【转】面向对象之多态(向上转型与向下转型)

    转:https://blog.csdn.net/qq_31655965/article/details/54746235. 多态,大概每个人都知道.但是,又有几个人真的理解什么是多态.多态有哪些细节呢 ...

  5. chapter7 面向对象之向上转型、向下转型及多态

    文章目录 1.对象类型转换 1.1向上转型 1.2向下转型 2.多态 1.对象类型转换 将一个类型强制转换成另一个类型的过程被称为类型转换.本节所说的对象类型转换,是指存在继承关系的对象,不是任意类型 ...

  6. 【JavaSE】面向对象之多态、向上转型与向下转型

    本专栏为 JavaSE 的学习笔记及相关项目,专栏长期免费更新 ❤️ ❤️ ❤️ ❤️ 个人主页:Nezuko627 欢迎来访~~~ ⭐️往期回顾: [JavaSE]继承中内存发生了什么变化?这篇文章 ...

  7. 多态的向上转型与向下转型

    多态的向上转型与向下转型 多态的转型分为向上转型与向下转型两种: A:向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程. 使用格式: 父类类型  变量名 = new ...

  8. 多态、向上转型、向下转型

    7.2.1 引入 多态是继封装.继承之后,面向对象的第三大特性. 生活中,比如求面积的功能,圆.矩形.三角形实现起来是不一样的.跑的动作,小猫.小狗和大象,跑起来是不一样的.再比如飞的动作,昆虫.鸟类 ...

  9. 秒懂Java多态的引用类型转换——向上转型、向下转型(强制转型)

    多态的转型分为向上转型和向下转型两种 向上转型 多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的.当父类引用指向一个子类对象时,便是向上转型. 使用格式: 父类类型 变量名 = new 子 ...

最新文章

  1. 学习进度条(第一周)
  2. 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录
  3. Apache Rewrite的主要功能
  4. Python入门图文解说
  5. java 1.8有没有jshell_收藏了800道Java后端经典面试题,分享给大家,希望你找到自己理想的Offer呀~...
  6. 称新手机是“二手货” 消费者起诉要求三倍赔偿
  7. 键盘皇者 RealForce 104Pro独家评测
  8. 小程序学习笔记(2)-简单的小例子了解小程序的语法
  9. 仿链家地图找房的简单实现
  10. 房屋户型图识别方法AI自适应墙体识别
  11. 电子元器件检测与维修从入门到精通视频教程
  12. 六轴传感器MPU6050
  13. PowerBI-筛选器函数-KEEPFILTERS
  14. 《联众》并购案细节公布,海虹海外公司浮出水面(ZT)
  15. Android有道词典开发
  16. vue中父传子,父传孙说明
  17. 【GIT】error: failed to push some refs to 'https://github.com/username/python.git'
  18. 四舍五入VS银行家舍入 (四舍六入五取偶)
  19. WHQL认证和代码签名
  20. XSS(Cross Site Scripting)攻击简介

热门文章

  1. HttpClient 调用WebAPI时—传参的三种方式(ASP.NET MVCCORE均适用)
  2. WAMP中的MySQL设置密码(默认密码为空)
  3. 第一章 SDN介绍 (附件3)【云计算,SDN,虚拟化三者关系】
  4. SQL基础【三、Select】
  5. Condition中的transferForSignal()方法的不解
  6. Selenium2之Web自动化编写API(Java)
  7. 洛谷 P1849 [USACO12MAR]拖拉机Tractor
  8. android BluetoothAdapter无法搜索到蓝牙问题
  9. Flask 生成下载文件
  10. 刚回到北京,倒时差中……