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 }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM