华南俳烁实业有限公司

java

當前位置:中華考試網(wǎng) >> java >> java教程 >> 文章內(nèi)容

Java面向?qū)ο螅篔ava重寫(Override)

來源:中華考試網(wǎng)  [2016年2月19日]  【

重寫是子類對父類的允許訪問的方法的實現(xiàn)過程進行重新編寫!返回值和形參都不能改變。即外殼不變,核心重寫!

重寫的好處在于子類可以根據(jù)需要,定義特定于自己的行為。

也就是說子類能夠根據(jù)需要實現(xiàn)父類的方法。

在面向?qū)ο笤瓌t里,重寫意味著可以重寫任何現(xiàn)有方法。實例如下:

class Animal{

   public void move(){
      System.out.println("動物可以移動");
   }
}

class Dog extends Animal{

   public void move(){
      System.out.println("狗可以跑和走");
   }
}

public class TestDog{

   public static void main(String args[]){
      Animal a = new Animal(); // Animal 對象
      Animal b = new Dog(); // Dog 對象

      a.move();// 執(zhí)行 Animal 類的方法

      b.move();//執(zhí)行 Dog 類的方法
   }
}

以上實例編譯運行結果如下:

動物可以移動
狗可以跑和走

在上面的例子中可以看到,盡管b屬于Animal類型,但是它運行的是Dog類的move方法。

這是由于在編譯階段,只是檢查參數(shù)的引用類型。

然而在運行時,Java虛擬機(JVM)指定對象的類型并且運行該對象的方法。

因此在上面的例子中,之所以能編譯成功,是因為Animal類中存在move方法,然而運行時,運行的是特定對象的方法。

思考以下例子:

class Animal{

   public void move(){
      System.out.println("動物可以移動");
   }
}

class Dog extends Animal{

   public void move(){
      System.out.println("狗可以跑和走");
   }
   public void bark(){
      System.out.println("狗可以吠叫");
   }
}

public class TestDog{

   public static void main(String args[]){
      Animal a = new Animal(); // Animal 對象
      Animal b = new Dog(); // Dog 對象

      a.move();// 執(zhí)行 Animal 類的方法
      b.move();//執(zhí)行 Dog 類的方法
      b.bark();
   }
}

以上實例編譯運行結果如下:

TestDog.java:30: cannot find symbol
symbol  : method bark()
location: class Animal
                b.bark();
                 ^

該程序?qū)伋鲆粋編譯錯誤,因為b的引用類型Animal沒有bark方法。

責編:ljnbset
  • 會計考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語考試
  • 學歷考試
武鸣县| 新巴尔虎左旗| 虹口区| 龙川县| 普安县| 山丹县| 康保县| 荆门市| 昌黎县| 廊坊市| 西安市| 台州市| 克什克腾旗| 海淀区| 桓台县| 商都县| 烟台市| 康平县| 洛南县| 石景山区| 保康县| 保山市| 万山特区| 达拉特旗| 巴彦县| 南昌县| 江永县| 拜泉县| 安远县| 镇江市| 峨边| 广安市| 正阳县| 新沂市| 千阳县| 博爱县| 北辰区| 龙南县| 酉阳| 怀来县| 海伦市|