我很难理解一些关于覆盖和重载的原则。
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)是超载 public void stampa(Figure f)而不是覆盖它。
并且 public void stampa(Rectangle r)并且 public void stampa(Figure f)也在重载 public void stampa(Square q)。
同样public void stampa(Square q)在 Rectangle 类中覆盖 Square 类中的方法。
第一个问题
这是关于这个结果的:q.stampa(f1); //Particular Figure
我知道在编译时q是一个,所以我会在课堂Square上看看这个方法。在运行时,我认为结果可能是“特定矩形”而不是“特定图形”public void stampa(Square q)SquareqRectangle
不知道我做错了什么
第二个问题
如果此时Rectangle扩展Figure而不是更多Square,我肯定会对Square q = new Rectangle();变量发生的事情有编译错误q(会有这样的变量,Square q或者我们没有任何名称为 q 的变量?),结果会是什么q.stampa(f1);
感谢并为我的英语感到抱歉,如果我在某些时候错了,请纠正我。