| 	
	
	
		
		|||||||
  | 
		
| 
 | 
![]()  | 
	
	
| 
		 | 
	Strumenti | 
| 		
			
			 | 
		#1 | 
| 
			
			
			
			 Senior Member 
			
		
			
			
			Iscritto dal: Nov 2003 
				
				
				
					Messaggi: 2950
				 
				
				
				
				 | 
	
	
	
	
		
			
			 
				
				[JAVA] Comportamento in Overloading + Overriding
			 
			
		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 
				__________________ 
		
		
		
		
	
	ASRock 939Dual-Sata2 (305mhz     3-4-4-8-1T 2,7v Rock Solid l 9700pro@460/760 l Enermax 485W l TRATTATIVE CONCLUSE
			 | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#2 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Oct 2007 
				Città: Padova 
				
				
					Messaggi: 4131
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		Usiamo il benedetto tag CODE per postare il codice (l'ho identato a mio piacere): 
		
	
		
		
		
		
			Codice: 
	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());
    }
}
				__________________ 
		
		
		
		
	
	As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford)  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#3 | 
| 
			
			
			
			 Senior Member 
			
		
			
			
			Iscritto dal: Nov 2003 
				
				
				
					Messaggi: 2950
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		tnx!
		 
		
	
		
		
		
		
			
				__________________ 
		
		
		
		
	
	ASRock 939Dual-Sata2 (305mhz     3-4-4-8-1T 2,7v Rock Solid l 9700pro@460/760 l Enermax 485W l TRATTATIVE CONCLUSE
			 | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#4 | |
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Aug 2005 
				Città: Monza 
				
				
					Messaggi: 2069
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 Quote: 
	
 
				__________________ 
		
		
		
		
	
	In Omnia Paratus - Improvvisare, Adattarsi, Raggiungere lo scopo XboxLive: WhiteWolf56933, PSN: WhiteWolf056933, Steam:WhiteWolf056933  | 
|
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#5 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Aug 2005 
				Città: Monza 
				
				
					Messaggi: 2069
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		dopo un po' di tempo speso a pensarci non so trovare una risposta alla tua domanda, anche perché non riesco a trovare un senso a questo tipo di implementazione ... potresti per favore farmi un'esempio concreto di applicazione ?
		 
		
	
		
		
		
		
			
				__________________ 
		
		
		
		
	
	In Omnia Paratus - Improvvisare, Adattarsi, Raggiungere lo scopo XboxLive: WhiteWolf56933, PSN: WhiteWolf056933, Steam:WhiteWolf056933  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#6 | 
| 
			
			
			
			 Senior Member 
			
		
			
			
			Iscritto dal: Dec 2005 
				
				
				
					Messaggi: 7258
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		si chiama polimorfismo. il metodo che viene chiamato dipende dal tipo che l'oggetto ha a runtime, non se ne occupa il compilatore quindi. 
		
	
		
		
		
		
		
	
	in questo caso il tipo della variabile a runtime è SubClass quindi viene chiamato il metodo di SubClass  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#7 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Aug 2005 
				Città: Monza 
				
				
					Messaggi: 2069
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		
definisci "a runtime" per favore !
		 
		
	
		
		
		
		
			
				__________________ 
		
		
		
		
	
	In Omnia Paratus - Improvvisare, Adattarsi, Raggiungere lo scopo XboxLive: WhiteWolf56933, PSN: WhiteWolf056933, Steam:WhiteWolf056933  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#8 | 
| 
			
			
			
			 Senior Member 
			
		
			
			
			Iscritto dal: Dec 2005 
				
				
				
					Messaggi: 7258
				 
				
				
				
				 | 
	
	|
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#9 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Aug 2005 
				Città: Monza 
				
				
					Messaggi: 2069
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		
fin qui ci arrivavo  
		
	
		
		
		
		
			
				__________________ 
		
		
		
		
	
	In Omnia Paratus - Improvvisare, Adattarsi, Raggiungere lo scopo XboxLive: WhiteWolf56933, PSN: WhiteWolf056933, Steam:WhiteWolf056933  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#10 | 
| 
			
			
			
			 Senior Member 
			
		
			
			
			Iscritto dal: Dec 2005 
				
				
				
					Messaggi: 7258
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		mi risulta che o2 viene istanziato una sola volta e nel modo seguente: 
		
	
		
		
		
		
		
	
	Codice: 
	o2=new SubClass();  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#11 | 
| 
			
			
			
			 Senior Member 
			
		
			
			
			Iscritto dal: Dec 2005 
				
				
				
					Messaggi: 7258
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		può anche darsi che non ho capito la domanda eh  
		
	
		
		
		
		
		
	
	 | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#12 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Aug 2005 
				Città: Monza 
				
				
					Messaggi: 2069
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		
o sn io che nn capisco un cazzo  
		
	
		
		
		
		
			  ..... un raduno di geni !!!
				__________________ 
		
		
		
		
	
	In Omnia Paratus - Improvvisare, Adattarsi, Raggiungere lo scopo XboxLive: WhiteWolf56933, PSN: WhiteWolf056933, Steam:WhiteWolf056933  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#13 | 
| 
			
			
			
			 Senior Member 
			
		
			
			
			Iscritto dal: Dec 2005 
				
				
				
					Messaggi: 7258
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		comunque in java è abbastanza facile capire quale metodo viene chiamato in caso di override o overload. ci si riferisce sempre al tipo dinamico. 
		
	
		
		
		
		
		
	
	ad esempio se ho: SuperClass a = new SubClass(); il tipo statico di "a" è SuperClass mentre il tipo dinamico è SubClass  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
		
		  
	   | 
| Strumenti | |
		
  | 
	
		
  | 
Tutti gli orari sono GMT +1. Ora sono le: 05:50.









		
		
		
   3-4-4-8-1T 2,7v Rock Solid l 9700pro@460/760 l Enermax 485W l 

		
 
 







