我很难理解一些关于覆盖和重载的原则。
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)
Square
q
Rectangle
不知道我做错了什么
第二个问题
如果此时Rectangle
扩展Figure
而不是更多Square
,我肯定会对Square q = new Rectangle();
变量发生的事情有编译错误q
(会有这样的变量,Square q
或者我们没有任何名称为 q 的变量?),结果会是什么q.stampa(f1);
感谢并为我的英语感到抱歉,如果我在某些时候错了,请纠正我。