1 public class Father { 2 3 protected void server(int i){ 4 switch (i){ 5 case 1: 6 methodone(); 7 break; 8 case 2: 9 methodtwo(); 10 break; 11 case 3: 12 methodthree(); 13 break; 14 default: 15 System.out.println("error"); 16 } 17 18 19 20 } 21 22 protected void methodthree() { 23 System.out.println("這是父類的方法三"); 24 } 25 26 protected void methodtwo() { 27 System.out.println("這是父類的方法二"); 28 } 29 30 protected void methodone() { 31 System.out.println("這是父類的方法一"); 32 } 33 }
1 public class Child extends Father { 2 3 @Override 4 protected void methodthree() { 5 System.out.println("這是子類的方法三"); 6 } 7 8 @Override 9 protected void methodtwo() { 10 System.out.println("這是子類的方法二"); 11 } 12 13 @Override 14 protected void methodone() { 15 System.out.println("這是子類的方法一"); 16 } 17 18 @Override 19 protected void server(int i) { 20 super.server(i); 21 } 22 }
1 public class Test_main { 2 public static void main(String[] args){ 3 Father fa=new Father(); 4 Father ch=new Child(); 5 fa.server(1); 6 ch.server(2); 7 8 } 9 }
在學習servlet的過程當中忽然對類方法的調用關係犯了糊塗,所謂基礎不牢,地動山搖,一個小問題足以搞得我模模糊糊。在類的繼承中,子類繼承父類的某個方法,若這個方法中含有對父類的另外一個方法(如method1,method2,method3)的調用,當子類不重載此方法(如method1,method2,method3)時,編譯器會自動調用父類的相應的方法;當子類重載此方法(如method1,method2,method3)時,編譯器會自動調用子類重載的方法。ide
換句話說,子類繼承父類方法時只是繼承了相應的代碼,父類調用子類的實例時會接着調用子類重載的方法,方法沒有被子類重載時纔會調用父類原本的方法。學習