Print
07-11-2008, 08:31
Ecco il codice incriminato:
public class SuperClass {
private int value;
public void method(SuperClass p){
this.value+=p.value;
System.out.println("Super method");
}
public void addValue(int v){
value+=v;
}
public int getValue(){
return value;
}
}
public class SubClass extends SuperClass {
public void method(SuperClass p){
this.addValue(10);
System.out.println("Sub method 2");
}
public void method (SubClass p){
super.method(p);
this.addValue(4);
System.out.println("Sub method");
}
public void method (SuperClass p){
super.method(p);
this.addValue(4);
System.out.println("Sub method");
}
}
public class Example {
public static void main(String [] args){
SuperClass o1, o2;
SubClass o3;
o1=new SuperClass();
o2=new SubClass();
o3=new SubClass();
o1.method(o2); System.out.println("1st result: "+o1.getValue());
o2.method(o2); System.out.println("2st result: "+o2.getValue());
o2.method(o1); System.out.println("3st result: "+o2.getValue());
o2.method(o3); System.out.println("4st result: "+o2.getValue());
o3.method(o1); System.out.println("5st result: "+o3.getValue());
o3.method(o3); System.out.println("6st result: "+o3.getValue());
o3.method(o2); System.out.println("7st result: "+o3.getValue());
}
}
Eseguendo ho il seguente output:
Super method
1st result: 0
Sub method 2
2st result: 10
Sub method 2
3st result: 20
Sub method 2
4st result: 30
Sub method 2
5st result: 10
Super method
Sub method
6st result: 24
Sub method 2
7st result: 34
--------------
La mia domanda è: Come mai quando da o2 chiamo method(), sia in overload sia in overriding,
viene eseguito sempre il metodo che al suo interno ha "Sub method 2"?
Come fa il compilatore a decidere quale metodo chiamare?
Ho già cercato della documentazione a riguardo ma nonho trovato nulla,
qualcuno sa dove posso trovare qualcosa che spieghi questo caso particolare?
Ringrazio chi saprà aiutarmi
public class SuperClass {
private int value;
public void method(SuperClass p){
this.value+=p.value;
System.out.println("Super method");
}
public void addValue(int v){
value+=v;
}
public int getValue(){
return value;
}
}
public class SubClass extends SuperClass {
public void method(SuperClass p){
this.addValue(10);
System.out.println("Sub method 2");
}
public void method (SubClass p){
super.method(p);
this.addValue(4);
System.out.println("Sub method");
}
public void method (SuperClass p){
super.method(p);
this.addValue(4);
System.out.println("Sub method");
}
}
public class Example {
public static void main(String [] args){
SuperClass o1, o2;
SubClass o3;
o1=new SuperClass();
o2=new SubClass();
o3=new SubClass();
o1.method(o2); System.out.println("1st result: "+o1.getValue());
o2.method(o2); System.out.println("2st result: "+o2.getValue());
o2.method(o1); System.out.println("3st result: "+o2.getValue());
o2.method(o3); System.out.println("4st result: "+o2.getValue());
o3.method(o1); System.out.println("5st result: "+o3.getValue());
o3.method(o3); System.out.println("6st result: "+o3.getValue());
o3.method(o2); System.out.println("7st result: "+o3.getValue());
}
}
Eseguendo ho il seguente output:
Super method
1st result: 0
Sub method 2
2st result: 10
Sub method 2
3st result: 20
Sub method 2
4st result: 30
Sub method 2
5st result: 10
Super method
Sub method
6st result: 24
Sub method 2
7st result: 34
--------------
La mia domanda è: Come mai quando da o2 chiamo method(), sia in overload sia in overriding,
viene eseguito sempre il metodo che al suo interno ha "Sub method 2"?
Come fa il compilatore a decidere quale metodo chiamare?
Ho già cercato della documentazione a riguardo ma nonho trovato nulla,
qualcuno sa dove posso trovare qualcosa che spieghi questo caso particolare?
Ringrazio chi saprà aiutarmi