○ 指當子類別繼承了父類別,而父類別中的Method,子類別若想要修改的話,就需要Overriding(覆寫)改成子類別想要的Method
覆寫條件
○ Method 名稱、引數型態、引數個數和傳回值必須與父類別一致
○ 存取權限不能低於父類別
Tips:
public > protected > default > private
若沒有特別設定一般預設為 default
※ 可用super呼叫父類別
● super(),用來將父類別的實例變數傳給父類別的建構子
○ super()一定要放在第一個敘述位置
○ super()呼叫順序父類別的實例變數優先,後放子類別的實例變數
========================================================================
實例: 做甜點的共同材料為麵粉,而蛋糕和餅乾所需的麵粉量不一樣且還有其他材料,這時就要用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 顆蛋
需要加麵粉700公克 需要搭配 5 種水果
需要加麵粉200公克 需要溶化 2.5 片巧克力
需要加麵粉500公克
鬆餅需要加 2 顆蛋
沒有留言:
張貼留言