Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Abbiamo provato per dieci giorni la Hyundai IONIQ 5 N, con 650 CV, 770 Nm e uno 0-100 km/h in 3,4 secondi. Il suo punto forte è N e-Shift, che simula un cambio a otto rapporti con suoni da motore termico e perfino un bang supersonico
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-11-2008, 09:31   #1
Print
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 ) l Venice 3000+@2466mhz (274x9)vcore default l Vdata -5B 2x512mb DC PC3200@ 260mhz 3-4-4-8-1T 2,7v Rock Solid l 9700pro@460/760 l Enermax 485W l TRATTATIVE CONCLUSE
Print è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 09:52   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 10:30   #3
Print
Senior Member
 
Iscritto dal: Nov 2003
Messaggi: 2950
tnx!
__________________
ASRock 939Dual-Sata2 (305mhz ) l Venice 3000+@2466mhz (274x9)vcore default l Vdata -5B 2x512mb DC PC3200@ 260mhz 3-4-4-8-1T 2,7v Rock Solid l 9700pro@460/760 l Enermax 485W l TRATTATIVE CONCLUSE
Print è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 11:30   #4
WhiteWolf42
Senior Member
 
L'Avatar di WhiteWolf42
 
Iscritto dal: Aug 2005
Città: Monza
Messaggi: 2073
Quote:
Originariamente inviato da Print Guarda i messaggi
Codice:
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");
	}
}
Il metodo void method(SuperClass p) è duplicato. Controlla e riformula.
__________________
In Omnia Paratus - Improvvisare, Adattarsi, Raggiungere lo scopo
XboxLive: WhiteWolf56933, PSN: WhiteWolf056933, Steam:WhiteWolf056933
WhiteWolf42 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 14:35   #5
WhiteWolf42
Senior Member
 
L'Avatar di WhiteWolf42
 
Iscritto dal: Aug 2005
Città: Monza
Messaggi: 2073
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
WhiteWolf42 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 15:01   #6
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
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
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 15:11   #7
WhiteWolf42
Senior Member
 
L'Avatar di WhiteWolf42
 
Iscritto dal: Aug 2005
Città: Monza
Messaggi: 2073
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
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
definisci "a runtime" per favore !
__________________
In Omnia Paratus - Improvvisare, Adattarsi, Raggiungere lo scopo
XboxLive: WhiteWolf56933, PSN: WhiteWolf056933, Steam:WhiteWolf056933
WhiteWolf42 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 17:27   #8
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
Quote:
Originariamente inviato da WhiteWolf42 Guarda i messaggi
definisci "a runtime" per favore !
durante l'esecuzione
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 18:09   #9
WhiteWolf42
Senior Member
 
L'Avatar di WhiteWolf42
 
Iscritto dal: Aug 2005
Città: Monza
Messaggi: 2073
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
durante l'esecuzione
fin qui ci arrivavo intendevo dire: con che discriminante prende la classe madre piuttosto che la figlia, dato che sono istanziate entrambe e vengono richiamate entrambe.
__________________
In Omnia Paratus - Improvvisare, Adattarsi, Raggiungere lo scopo
XboxLive: WhiteWolf56933, PSN: WhiteWolf056933, Steam:WhiteWolf056933
WhiteWolf42 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 18:31   #10
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
mi risulta che o2 viene istanziato una sola volta e nel modo seguente:
Codice:
o2=new SubClass();
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 18:42   #11
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
può anche darsi che non ho capito la domanda eh
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 20:20   #12
WhiteWolf42
Senior Member
 
L'Avatar di WhiteWolf42
 
Iscritto dal: Aug 2005
Città: Monza
Messaggi: 2073
Quote:
Originariamente inviato da k0nt3 Guarda i messaggi
può anche darsi che non ho capito la domanda eh
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
WhiteWolf42 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 21:12   #13
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
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
k0nt3 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
NVIDIA e Meta: 3 miliardi di dollari e p...
PHP2Shell: sfruttate attivamente le due ...
Raffreddamento passivo senza elettricità...
La deforestazione in Amazzonia crolla a ...
La luce del sole a mezzanotte, ecco come...
Oltre mille modelli 3D scaricati senza a...
274 brani di Elvis Presley sono stati us...
SVOLT avvia la produzione in serie di ba...
Apple rilascia macOS Sequoia 15.8.2 e Ta...
Attacchi hacker alla Camera: nel mirino ...
Android Auto prepara il numero preferito...
CPU e quantum computing dipendono da un ...
Microsoft rivede la sicurezza di Windows...
Linux 7.4 porta nel kernel Apple M4, Ten...
Boston Dynamics tira dritto sui cani rob...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:29.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v