この単純なプログラムの出力はThis is base
です。メソッドバインディングの混乱
public class mainApp{
private void func(){
System.out.println("This is base");
}
public static void main(String[] args){
mainApp newObj = new derived();
newObj.func();
}
}
class derived extends mainApp{
public void func(){
System.out.println("This is derived");
}
}
私の質問私達はこのライン
mainApp newObj = new derived();
を使用しているときである私たちが実際にのオブジェクトを作成していないが、基本クラスmainAppですの参照を使用してクラスを派生。だから、オブジェクトを使ってメソッドを呼び出すと、派生クラスからメソッドを取得できないのですか?なぜ私は基本クラスからメソッドを取得します。このラインを使用、
mainApp newObj = new derived();
は、我々は、mainAppですの基準を使用しているか、我々は、派生クラスのオブジェクトを操作しています。どちらが正しいか?
うわー、優秀な答えと私はパンチに私を打つ。 @iamcreasy [Java and Polymorphism](http://home.cogeco.ca/~ve3ll/jatutor5.htm)であなたの問題に関する混乱のシュラウドを解消するために少し読んでください。 – Grambot
私はJavaの静的型と動的型の区別に慣れていません!私はこれを見て実際にはかなり驚いていました。私はC++を最初に学んだことが良いことです。 :-) – templatetypedef
@templatetypedefしたがって、参照の後にドット表記法を使用するときは、その参照が指しているオブジェクトに関係なく、その特定の参照のメソッドを使用します。それが正しいか? & "参照は静的に型指定されています"という意味ですか? –