⒈ポリモーフィズムにおける非静的メンバー関数の特徴:
①コンパイル時: 参照変数が属するクラスに呼び出しメソッドがあるかどうかを確認します。存在する場合、コンパイルは成功します。そうでない場合、コンパイルは失敗します。
② 実行時: オブジェクトが属するクラスに呼び出されるメソッドがあるかどうかを確認します。
------------------------------------------------- -
//要するに: メンバー関数が呼び出されるとき、コンパイル時には左側を、実行時には右側を確認します。 //
---------------------------------------------- --- ---
2. ポリモーフィズムにおける同名のメンバ変数の特徴:(追記:異なる名前は検証されていません)
コンパイルかどうかに関係なく、左側(参照変数が属するクラス)を参照してください。実行中
3. ポリモーフィズムにおける静的メンバー 関数の特徴:
コンパイル、実行に関わらず、左側(参照変数が属するクラス)を参照
例:
Class Fu { int num=1; public void method1() { System.out.println("fu_1"); } public void method3() { System.out.println("fu_3"); } //静态方法(包括变量)不所属于对象,它绑定于所属的类,会在内存中提前加载出来 public static void method4() { System.out.println("fu_4"); } } Class Zi extends Fu { int num=2; public void method1() { System.out.println("zi_1"); } public void method2() { System.out.println("zi_2"); } public static void method4() { System.out.println("zi_4"); } } Class Duotaitest { public static void main (String [] args) { Fu f=new Zi (); f.method1(); //f.method2(); 此行代码若存在,则编译失败,Fu类中没此方法 f.method3(); f.method4(); System.out.println(f.num); Zi z= new Zi(); System.out.println(z.num); } /* 运行结果: zi_1 fu_3 fu_4 //静态方法不能被子类重写覆盖,若想调用子类中的静态方法(一般没这么用的,只是面试会用到)Zi.method4(类名.方法名) 1 2 */ }