糯米文學吧

位置:首頁 > 計算機 > java語言

java動態方法調度實例

java語言2.88W

  動態方法調度:

java動態方法調度實例

1. 訪問一個引用型的變量的非靜態方法,運行時與實際引用的對象的方法綁定。

2. 訪問一個引用型的變量的.靜態方法,運行時與聲明的類的方法綁定。

3. 訪問一個引用型的變量的成員變量(包括靜態變量和實例變量),運行時與聲明的類的成員變量綁定。

第3點尤其注意啊,之前我從來沒注意過啊

  1. 非靜態方法:

public class Person {public String name; public void getInfo() { tln("父類"); }}public class Student extends Person { public void getInfo() { // 方法重寫 nfo(); // 調用父類的方法 tln("子類");}public static void main(String[] args) { Person s = new Student(); Person t = new Person(); s = t; // S的對象類型是父類,即Person類 nfo();}}

運行結果為:父類

  2. 靜態方法:

public class Person {public String name; public static void getInfo() { tln("父類"); }}public class Student extends Person {Publics static void getInfo() { // 方法重寫tln("子類");}public static void main(String[] args) {Person s = new Student();nfo(); //等價於nfo();}}

運行結果為:父類

  3. 成員變量

public class erson {public String name = "father"; public void getInfo() { tln("父類"); }}public class Student extends Person {public String name = "son";public void getInfo() { // 方法重寫nfo(); // 調用父類的方法tln("子類");}public static void main(String[] args) {Person s = new Student();Person t = new Person();s = t;tln();}}

運行結果:fanther

將成員變量變為static類型的也是一樣的

另外對於如下兩個變量

Students = new Student();Person t = new Student();

不過這兩者實際上是有區別的,當子類Student中有了自己的個性方法(在父類中沒有的)時,比如有了方法

public goSchool(){}

那麼只有s可以調用這個goSchool方法

而t不能調用

希望本文所述對大家java程序設計有所幫助。

標籤:JAVA 實例 調度