本文實例講述了java動態方法調度。分享給大家供大家參考,具體如下:
動態方法調度:
1. 訪問一個引用型的變量的非靜態方法,運行時與實際引用的對象的方法綁定。
2. 訪問一個引用型的變量的靜態方法,運行時與聲明的類的方法綁定。
3. 訪問一個引用型的變量的成員變量(包括靜態變量和實例變量),運行時與聲明的類的成員變量綁定。
第3點尤其注意啊,之前我從來沒注意過啊
1. 非靜態方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class Person { public String name; public void getInfo() { System.out.println( "父類" ); } } public class Student extends Person { public void getInfo() { // 方法重寫 super .getInfo(); // 調用父類的方法 System.out.println( "子類" ); } public static void main(String[] args) { Person s = new Student(); Person t = new Person(); s = t; // S的對象類型是父類,即Person類 s.getInfo(); } } |
運行結果為:父類
2. 靜態方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class Person { public String name; public static void getInfo() { System.out.println( "父類" ); } } public class Student extends Person { Publics static void getInfo() { // 方法重寫 System.out.println( "子類" ); } public static void main(String[] args) { Person s = new Student(); s.getInfo(); //等價于Person.getInfo(); } } |
運行結果為:父類
3. 成員變量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class erson { public String name = "father" ; public void getInfo() { System.out.println( "父類" ); } } public class Student extends Person { public String name = "son" ; public void getInfo() { // 方法重寫 super .getInfo(); // 調用父類的方法 System.out.println( "子類" ); } public static void main(String[] args) { Person s = new Student(); Person t = new Person(); s = t; System.out.println(s.name); } } |
運行結果:fanther
將成員變量變為static類型的也是一樣的
另外對于如下兩個變量
1
2
|
Students = new Student(); Person t = new Student(); |
不過這兩者實際上是有區別的,當子類Student中有了自己的個性方法(在父類中沒有的)時,比如有了方法
1
2
|
public goSchool(){ } |
那么只有s可以調用這個goSchool方法
而t不能調用
希望本文所述對大家java程序設計有所幫助。