オーバーライドとオーバーロードに関するいくつかの原則を理解するのが難しいです。オーバーロードとオーバーライドによるJavaメソッドの選択
public class Figure{
public void stampa(Figure f){
System.out.println("Figure");
}
}
public class Square extends Figure{
public void stampa(Square q){
System.out.println("Square");
}
}
public class Rectangle extends Square{
public void stampa(Rectangle r){
System.out.println("Rectangle");
}
public void stampa(Square r){
System.out.println("Particular Rectangle");
}
public void stampa(Figure f){
System.out.println("Particular Figure");
}
}
public class Test{
public static void main(String args[]){
Figure f1,f2;
Square q = new Rectangle();
Rectangle r = new Rectangle();
f1 = new Square();
f2 = new Rectangle();
f1.stampa(f2); //Figure
q.stampa(r); //Particular Rectangle
f1.stampa(q); //Figure
q.stampa(f1); //Particular Figure
q.stampa(q); //Particupar Rectangle
}
}
私はpublic void stampa(Square q)
がそれをoverrding public void stampa(Figure f)
をオーバーロードしていないことを知っています。
public void stampa(Rectangle r)
およびpublic void stampa(Figure f)
もまた、public void stampa(Square q)
にオーバーロードされています。
また、Rectangleクラスのpublic void stampa(Square q)
は、Squareクラスのメソッドをオーバーライドしています。
最初の質問
それがこの結果についてです:q.stampa(f1); //Particular Figure
私はコンパイル時にq
はので、私はSquare
クラスでこのメソッドpublic void stampa(Square q)
を見ていきますSquare
であることを知っています。そして実行時にq
はRectangle
ので、私が代わりに「特に図」の結果「とは、特定の長方形」かもしれないと思っている私がいる場合、間違った
2番目の質問
をやっている
わかりませんこの時点でRectangle
はFigure
を拡張し、それ以上はSquare
ではありません。Square q = new Rectangle();
にコンパイルエラーが発生しますq
に何が起こるか(Square q
などの変数があるか、またはv私が間違っている場合、私の英語のために申し訳ありませんし、私を修正してください。
*「第2の質問」* ...いいえ、投稿ごとに1つだけ、2つではありません。 – Tom
あなたのクラスは 'Figura'と定義されています。これが単なるコピー&ペーストのタイプミスでない限り、これはいくつかの問題を引き起こすでしょう。 – kunruh
@ kunruhありがとう、私はそれを修正しました – totoro