user1107888:
私は、OracleのWebサイト上のJavaプログラマー8 I試験のサンプルの質問を経由して、次の質問に出くわしました。
abstract class Writer {
public static void write() {
System.out.println("Writing...");
}
}
class Author extends Writer {
public static void write() {
System.out.println("Writing book");
}
}
class Programmer extends Writer {
public static void write() {
System.out.println("Writing code");
}
public static void main(String[] args) {
Writer w = new Author();
w.write();//What would be the ouput here?
}
}
正しい答えは、抽象クラスのメソッドが呼び出されるということです。
さて、私の理解では、タイプの親クラスの変数は、サブクラスのオブジェクトへの参照が含まれている場合は多型で、その後、サブクラスのメソッドが呼び出されるということでした。
したがって、静的関数の場合には、その変数refrenceが含まれているクラスの方法は、私は理解しています右と呼ばれるだろうと?
GhostCat敬礼モニカC.:
静的メソッドのための多型はありません。
コンパイラは、メソッドが呼び出されようとしているコンパイル時に決定しました。
これは、Wは作家であることを見て、それはどちらも実際のインスタンスは、実行時にその特定のサブクラスのものであろうことを知っていないか注意しません。コンパイラは、時にはそれを知っている可能性がありますが、Javaは、ここで簡単にパスを取ります。
手段はOOPの不可欠な要素の一つを犠牲にしてやって:それはあなたが本当の世界の生産コードで静的メソッドを使用してについて本当に注意を払っている理由の一つです。