1. 程式人生 > >java--類繼承和實現的介面中含有相同的方法

java--類繼承和實現的介面中含有相同的方法

首先,說一下,當某一個類實現了兩個介面的時候,兩個介面中存在兩個相同的方法,在實現的類中只需實現一個方法的方法體。

當一個類繼承一個類,並且實現一個或者多個介面的時候,其中,父類和父介面中存在相同的方法。

  如果子類中存在該方法的實現體或者說是覆蓋,則使用該類的物件去掉用該方法時候,其實掉用的是來自介面的實現方法,而不是來自父類方法的覆蓋。

  如果子類中不存在該方法的實現[或者覆蓋],在使用該類物件掉用該方法的時候,就會使用從父類繼承的方法。同時將這個從父類繼承來的方法當作介面方法的實現,也就可以不再實現介面的方法體。

另外值得注意的就是,extends & implements 的書寫順序不能改變。

為了方便記憶可以認為:介面的優先級別要高於父類。

此處附上程式碼:

複製程式碼

1 package Demo; 2 3 interface CanFight { 4 void fight(); 5 } 6 7 interface CanSwim { 8 void swim(); 9 } 10 11 interface CanFly { 12 void fly(); 13 } 14 15 class ActionCharactor { 16 public void fight() { 17 System.out.println("fight() from class ");

18 } 19 } 20 21 class Hero extends ActionCharactor 22 implements CanFight, CanSwim, CanFly { 23 public void swim() { 24 System.out.println("Hero swim."); 25 } 26 27 public void fly() { 28 System.out.println("Hero fly."); 29 } 30 public void fight(){
31 System.out.println("Hero can fight."); 32 } 33 } 34 35 public class Demo1_1 { 36 public static void t(CanFight x) { 37 x.fight(); 38 } 39 40 public static void u(CanSwim s) { 41 s.swim(); 42 } 43 44 public static void w(ActionCharactor x) { 45 x.fight(); 46 } 47 48 public static void v(CanFly x) { 49 x.fly(); 50 } 51 52 public static void main(String[] args) { 53 // 向上轉型 54 Hero hero = new Hero(); 55 t(hero); 56 u(hero); 57 w(hero); 58 v(hero); 59 ActionCharactor a = new ActionCharactor(); 60 a.fight(); 61 } 62 }

複製程式碼

輸出: