2015年2月8日 星期日

物件導向 ─ Overriding

Overriding


○ 指當子類別繼承了父類別,而父類別中的Method,子類別若想要修改的話,就需要Overriding(覆寫)改成子類別想要的Method

覆寫條件
               ○ Method 名稱、引數型態、引數個數和傳回值必須與父類別一致
               ○ 存取權限不能低於父類別

 Tips:
             public > protected > default > private

             若沒有特別設定一般預設為 default 
               
※ 可用super呼叫父類別

   ● super(),用來將父類別的實例變數傳給父類別的建構子
     
      ○ super()一定要放在第一個敘述位置
    
      ○ super()呼叫順序父類別的實例變數優先,後放子類別的實例變數

   ● super.Method();,用來呼叫父類別的方法成員




========================================================================

實例: 做甜點的共同材料為麵粉,而蛋糕和餅乾所需的麵粉量不一樣且還有其他材料,這時就要用Overriding的方式分別完成食譜

    class Dessert {                                                                            //  父類別

        int material (){

            System.out.println("需要加麵粉500公克");

            return 0;
        }
    }

          
    class Cake extends Dessert {                                                        //  extends Dessert 繼承父類別

        int material (){

            System.out.print("需要加麵粉700公克 ");

            return 0;
        }

        int fruits (int quantity){            // 新增一個int型態的Method,裡面要有引數和父類別的Method區分

            System.out.println("需要搭配 "+quantity+" 種水果");

            return 0;
        }
        
    }


     class Cookie extends Dessert{

          int material (){

            System.out.print("需要加麵粉200公克 ");

            return 0;
        }

          double flavor (double piece){        

                                      // 新增一個double型態的Method,因為與父類別型態不一所以引數可放可不放

            System.out.println("需要溶化 "+piece+" 片巧克力");

            return 0;
          }
    }


      class muffin extends Dessert{
        
           int egg=2;

           int material (){                                                        

                super.material();                                                // 利用super呼叫父類別的方法

                System.out.println("鬆餅需要加 "+egg+" 顆蛋");

         return 0;
     }
        

    }


    public class Overriding{

    public static void main(String [] args){

             Dessert d = new Dessert();                     // 新增一個Dessert物件
             Cake fruit = new Cake();
             Cookie chocolate = new Cookie();
             
             d.material();           
             fruit.material();                                   // 呼叫fruit(蛋糕)的Method
             fruit.fruits(5);                                     
             chocolate.material();                            // 呼叫chocolate(餅乾)的Method
             chocolate.flavor(2.5);                           

         }
}
------------------------------------------------------------------------------------------------------------------------
Result:

需要加麵粉500公克
需要加麵粉700公克 需要搭配 5 種水果
需要加麵粉200公克 需要溶化 2.5 片巧克力
需要加麵粉500公克
鬆餅需要加 2 顆蛋


沒有留言:

張貼留言