日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/6/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Day11多态部分-6 【1.3 对象的向上转型和向下转型】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【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 对象的向上转型和向下转型】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。