Java學習筆記-繼承,多態

          Posted on 2006-06-27 17:20 多力宇揚 閱讀(209) 評論(0)  編輯  收藏 所屬分類: Core Java

          理解繼承是理解面向對象程序設計的關鍵.在Java中,通過關鍵字extends繼承一個已有的類,被繼承的類稱為父類(超類,基類),新的類稱為子類(派生類).在Java中不允許多繼承.code:
          class Animal
          {
          ?int height,weight;
          ?void eat()
          ?{
          ? System.out.println("Animal eat!");
          ?}
          ?void sleep()
          ?{
          ? System.out.println("Animal sleep!");
          ?}
          ?void breathe()
          ?{
          ? System.out.println("Animal breathe!");
          ?}
          }
          class Fish extends Animal
          {
          ?
          }
          class DoMain
          {
          ?public static void main(String[] args)
          ?{
          ? Animal an=new Animal();
          ? Fish fn=new Fish();
          ?
          ? an.breathe();
          ? fn.breathe();
          ? fn.height=30;
          ? fn.weight=20;
          ?}
          }
          Result:
          F:\Java Develop>javac Animal.java

          F:\Java Develop>java DoMain
          Animal breathe!
          Animal breathe!
          (這說明派生類繼承了父類的所有方法和成員變量.)

          方法的覆蓋(override)
          在子類中定義一個與父類同名,返回類型,參數類型均相同的一個方法,稱為方法的覆蓋,方法的覆蓋發生在子類與父類之間.
          code:
          class Animal
          {
          ?int height,weight;
          ?void eat()
          ?{
          ? System.out.println("Animal eat!");
          ?}
          ?void sleep()
          ?{
          ? System.out.println("Animal sleep!");
          ?}
          ?void breathe()
          ?{
          ? System.out.println("Animal breathe!");
          ?}
          }
          class Fish extends Animal
          {
          ?int weight,height;?? //隱藏了父類的weight,height;
          ?void breathe()? //override method breathe()
          ?{
          ? super.breathe();? //用super調用父類的構造方法
          ? System.out.println("Fish bubble");
          ?}
          }
          class DoMain
          {
          ?public static void main(String[] args)
          ?{
          ?// Animal an=new Animal();
          ? Fish fn=new Fish();
          ?
          ? an.breathe();
          ? fn.breathe();
          ? fn.height=30;
          ? fn.weight=20;
          ?}
          }
          輸出結果:
          F:\Java Develop>javac Animal.java

          F:\Java Develop>java DoMain
          Animal breathe!
          Fish bubble

          特殊變量super
          * 使用特殊變量super提供對父類的訪問
          * 可以使用super訪問父類被子類隱藏的變量或覆蓋的方法
          * 每個子類構造方法的第一條語句都是隱含的調用super,如果父類沒有這種形式的構造函數就會報錯.
          code:
          class Animal
          {
          ?int height,weight;
          ?Animal()
          ?{
          ? System.out.println("Animal construct");
          ?}
          ?void eat()
          ?{
          ? System.out.println("Animal eat!");
          ?}
          ?void sleep()
          ?{
          ? System.out.println("Animal sleep!");
          ?}
          ?void breathe()
          ?{
          ? System.out.println("Animal breathe!");
          ?}
          }

          class Fish extends Animal
          {
          ?Fish()
          ?{
          ? System.out.println("Fish construct");
          ?}
          ?void breathe()? //override method breathe()
          ?{
          ? System.out.println("Fish bubble");
          ?}
          }
          class DoMain
          {
          ?public static void main(String[] args)
          ?{
          ? //Animal an=new Animal();
          ? Fish fn=new Fish();
          ?
          ? //an.breathe();
          ? //fn.breathe();
          ? //fn.height=30;
          ? //fn.weight=20;
          ?}
          }
          輸出結果:
          F:\Java Develop>javac Animal.java

          F:\Java Develop>java DoMain
          Animal construct
          Fish construct



          ?通過覆蓋父類的方法來實現,在運行時根據傳遞對象的引用,來調用相應的方法.
          code:
          class Animal
          {
          ?int height,weight;
          ?Animal()
          ?{
          ? System.out.println("Animal construct");
          ?}
          ?void eat()
          ?{
          ? System.out.println("Animal eat!");
          ?}
          ?void sleep()
          ?{
          ? System.out.println("Animal sleep!");
          ?}
          ?void breathe()
          ?{
          ? System.out.println("Animal breathe!");
          ?}
          }

          class Fish extends Animal
          {
          ?Fish()
          ?{
          ? System.out.println("Fish construct");
          ?}
          ?void breathe()? //override method breathe()
          ?{
          ? System.out.println("Fish bubble");
          ?}
          }
          class DoMain
          {
          ?static void fn(Animal an)
          ?{
          ? an.breathe();
          ?}
          ?public static void main(String[] args)
          ?{
          ? //Animal an=new Animal();
          ? Fish fh=new Fish();
          ? Animal an;
          ? an=fh;
          ? DoMain.fn(an);
          ?}
          }

          主站蜘蛛池模板: 中方县| 将乐县| 梁山县| 鄱阳县| 尉犁县| 宁蒗| 东阳市| 石渠县| 贵港市| 施甸县| 安陆市| 上高县| 唐山市| 隆子县| 凤冈县| 日土县| 金门县| 博客| 华蓥市| 界首市| 特克斯县| 莱阳市| 通海县| 永康市| 秭归县| 简阳市| 彩票| 衡山县| 得荣县| 浮山县| 霞浦县| 星子县| 柳州市| 阿克苏市| 鄂伦春自治旗| 常德市| 奉新县| 杭锦旗| 策勒县| 岳阳市| 深州市|