亚洲欧洲国产欧美一区精品,激情五月亚洲色五月,最新精品国偷自产在线婷婷,欧美婷婷丁香五月天社区

      考試首頁(yè) | 考試用書 | 培訓(xùn)課程 | 模擬考場(chǎng) | 考試論壇  
      全國(guó)  |             |          |          |          |          |         
        當(dāng)前位置:計(jì)算機(jī)等級(jí) > 二級(jí)考試 > Java語(yǔ)言程序設(shè)計(jì) > 考試輔導(dǎo) > 文章內(nèi)容
        

      全國(guó)計(jì)算機(jī)等級(jí)考試Java語(yǔ)言程序設(shè)計(jì)輔導(dǎo)(59)

      中華IT學(xué)院   【 】  [ 2016年2月22日 ]

      我們將介紹在Java中,當(dāng)設(shè)計(jì)類時(shí),被重載的方法的行為怎樣影響多態(tài)性。

      我們已經(jīng)討論了方法的重載,也就是子類能夠重載父類的方法。

      當(dāng)子類對(duì)象調(diào)用重載的方法時(shí),調(diào)用的是子類的方法,而不是父類中被重載的方法。

      要想調(diào)用父類中被重載的方法,則必須使用關(guān)鍵字super。

      /* 文件名 : Employee.java */
      public class Employee
      {
         private String name;
         private String address;
         private int number;
         public Employee(String name, String address, int number)
         {
            System.out.println("Constructing an Employee");
            this.name = name;
            this.address = address;
            this.number = number;
         }
         public void mailCheck()
         {
            System.out.println("Mailing a check to " + this.name
             + " " + this.address);
         }
         public String toString()
         {
            return name + " " + address + " " + number;
         }
         public String getName()
         {
            return name;
         }
         public String getAddress()
         {
            return address;
         }
         public void setAddress(String newAddress)
         {
            address = newAddress;
         }
         public int getNumber()
         {
           return number;
         }
      }

      假設(shè)下面的類繼承Employee類:

      /* 文件名 : Salary.java */
      public class Salary extends Employee
      {
         private double salary; //Annual salary
         public Salary(String name, String address, int number, double
            salary)
         {
             super(name, address, number);
             setSalary(salary);
         }
         public void mailCheck()
         {
             System.out.println("Within mailCheck of Salary class ");
             System.out.println("Mailing check to " + getName()
             + " with salary " + salary);
         }
         public double getSalary()
         {
             return salary;
         }
         public void setSalary(double newSalary)
         {
             if(newSalary >= 0.0)
             {
                salary = newSalary;
             }
         }
         public double computePay()
         {
            System.out.println("Computing salary pay for " + getName());
            return salary/52;
         }
      }

      現(xiàn)在我們仔細(xì)閱讀下面的代碼,嘗試給出它的輸出結(jié)果:

      /* 文件名 : VirtualDemo.java */
      public class VirtualDemo
      {
         public static void main(String [] args)
         {
            Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
            Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);
            System.out.println("Call mailCheck using Salary reference --");
            s.mailCheck();
            System.out.println("\n Call mailCheck using Employee reference--");
            e.mailCheck();
          }
      }

      以上實(shí)例編譯運(yùn)行結(jié)果如下:

      Constructing an Employee
      Constructing an Employee
      Call mailCheck using Salary reference --
      Within mailCheck of Salary class
      Mailing check to Mohd Mohtashim with salary 3600.0
      
      Call mailCheck using Employee reference--
      Within mailCheck of Salary class
      Mailing check to John Adams with salary 2400.0

      例子中,我們實(shí)例化了兩個(gè)Salary對(duì)象。一個(gè)使用Salary引用s,另一個(gè)使用Employee引用。

      編譯時(shí),編譯器檢查到mailCheck()方法在Salary類中的聲明。

      在調(diào)用s.mailCheck()時(shí),Java虛擬機(jī)(JVM)調(diào)用Salary類的mailCheck()方法。

      因?yàn)閑是Employee的引用,所以調(diào)用e的mailCheck()方法則有完全不同的結(jié)果。

      當(dāng)編譯器檢查e.mailCheck()方法時(shí),編譯器檢查到Employee類中的mailCheck()方法。

      在編譯的時(shí)候,編譯器使用Employee類中的mailCheck()方法驗(yàn)證該語(yǔ)句, 但是在運(yùn)行的時(shí)候,Java虛擬機(jī)(JVM)調(diào)用的是Salary類中的mailCheck()方法。

      該行為被稱為虛擬方法調(diào)用,該方法被稱為虛擬方法。

      Java中所有的方法都能以這種方式表現(xiàn),借此,重寫的方法能在運(yùn)行時(shí)調(diào)用,不管編譯的時(shí)候源代碼中引用變量是什么數(shù)據(jù)類型。

      分享到:
      本文糾錯(cuò)】【告訴好友】【打印此文】【返回頂部
      將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動(dòng)訪問考試網(wǎng) | 復(fù)制本頁(yè)地址,傳給QQ/MSN上的好友 | 申請(qǐng)鏈接 | 意見留言 TOP
      關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
      Copyright © 2007-2013 中華考試網(wǎng)(Examw.com) All Rights Reserved