この記事では、Javaの動的メソッドスケジューリングについて説明します。次のように、参照のために共有してください。
動的メソッドスケジューリング:
1.参照される変数の非静的な方法にアクセスし、実行時に実際に参照されるオブジェクトの方法にバインドします。
2。実行時に宣言されたクラスメソッドにバインドされる参照変数の静的方法にアクセスします。
3.参照される変数のメンバー変数(静的変数とインスタンス変数を含む)にアクセスし、実行時に宣言されたクラスのメンバー変数をバインドします。
ポイント3:特別な注意を払ってください、私は以前にそれに気づいたことがありません
1。非静的な方法:
パブリッククラスの人{パブリック文字列名; public void getInfo(){system.out.println( "親クラス"); }} public class Students Extends person {public void getInfo(){// method override super.getinfo(); //親クラスメソッドSystem.out.println( "subclass");} public static void main(string [] args){person s = new sustent();人T = new Person(); s = t; // sのオブジェクトタイプは親クラスです。つまり、人クラスs.getinfo();}}です。実行の結果は次のとおりです。親クラス
2。静的方法:
パブリッククラスの人{パブリック文字列名; public static void getInfo(){system.out.println( "親クラス"); }} public class Students Extends person {publics static void getInfo(){// Method override System.out.println( "subclass");} public static void main(string [] args){person s = new Student(); s.getinfo(); // person.getInfo();}}に相当します実行の結果は次のとおりです。親クラス
3。メンバー変数
public class erson {public string name = "father"; public void getInfo(){system.out.println( "親クラス"); }} public class Students Extends person {public string name = "son"; public void getInfo(){// Method Override super.getinfo(); //親クラスのメソッドsystem.out.println( "subclass");} public static void main(string [] args){person s = new susten(); person t = new person(); s = t; system.out.println(s.name);}}}を呼び出すランニング結果:Fanther
メンバー変数を静的タイプに変更する場合も同じことが言えます
さらに、次の2つの変数について
学生= new Student(); person t = new Student();
ただし、実際には2つに違いがあります。サブクラスの学生が独自のパーソナライズされた方法(親クラスではない)を持っている場合、たとえば、方法があります
public goschool(){}次に、このGoschoolメソッドと呼ぶことができます
Tを呼ぶことはできません
この記事がみんなのJavaプログラミングに役立つことを願っています。