|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: May 2015
Messaggi: 26
|
[JAVA] Aiuto su ereditarietà
Salve, sto cercando di capire l'ereditarietà in java.
In questo codice Codice:
class Quadrilatero {
int latoA;
int latoB;
int latoC;
public Quadrilatero (int a, int b, int c, int d) {
int latoA = a;
int latoB = b;
int latoC = c;
int latoD = d;
}
static int perimetro (int a, int b, int c, int d) {
return a+b+c+d;
}
public class Rettangolo extends Quadrilatero {
public Rettangolo (int a, int b) {
super (a, b, a, b);
}
}
public static void main(String[] args) {
Rettangolo uno = new Rettangolo (10,10);
System.out.println(perimetro(uno));
}
}
La classe Rettangolo derivata da Quadrilatero riceve solo 2 parametri (visto che i lati dei rettangoli sono uguali in coppia). Ma perchè se creo un oggetto rettangolo e gli do due parametri, invece di restituirmi il perimetro mi da errore? |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Dec 2008
Città: Brescia
Messaggi: 19
|
il codice non è corretto... la classe Rettangolo non la devi dichiarare all'interno della classe Quadrilatero... deve essere dichiarata al di fuori, esattamente come fosse un'altra classe qualsiasi...
__________________
http://www.browsergamelabs.com |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2009
Messaggi: 845
|
Un altro problema è che perimetro vuole comunque 4 parametri interi, mentre tu gliene hai passato uno solo (e non intero, ma di tipo Rettangolo).
Ti conviene vederti anche le basi della sintassi, insieme all'ereditarietà... Nonché i concetti di oggetto/classi e i modificatori (quello static del metodo perimetro ti impedisce di chiamare il metodo sull'oggetto) |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2010
Messaggi: 1609
|
Quoto anch'io il consiglio su un ripasso generale. Infatti, oltre a quanto ti è già stato detto, leggndo velocemente:
1) La dichiarazione della classe quadrilatero ha solo tre lati 2) Se la classe quadrilatero ha solo un costruttore in cui vengono passate le misure dei lati, non ha senso passare nuovamente tali dati quando si deve calcolare il perimetro
__________________
Trattative nel mercatino: IronHead - fybpeppe - xcavax Utenti assolutamente DA EVITARE: devilred "Chi c**a sott' 'a neve, pure si ffa 'a bbuca e poi 'a copre, quanno 'a neve se scioje, 'a mm***a vie' sempre fori" T. Milian |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: May 2015
Messaggi: 26
|
Ok, adesso funziona:
Codice HTML:
class Quadrilatero {
int latoA;
int latoB;
int latoC;
int latoD;
public Quadrilatero(int a, int b, int c, int d) {
latoA = a;
latoB = b;
latoC = c;
latoD = d;
}
public int perimetro() {
return latoA + latoB + latoC + latoD;
}
public static void main(String[] args) {
Rettangolo uno = new Rettangolo(3, 3);
System.out.println(uno.perimetro());
}
}
class Rettangolo extends Quadrilatero {
public Rettangolo(int a, int b) {
super(a, b, a, b);
}
}
|
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: May 2015
Messaggi: 26
|
Con lo static si puòfare così:
Codice HTML:
class Quadrilatero {
int latoA;
int latoB;
int latoC;
int latoD;
public Quadrilatero(int a, int b, int c, int d) {
latoA = a;
latoB = b;
latoC = c;
latoD = d;
}
static int perimetro(Quadrilatero q) {
return q.latoA + q.latoB + q.latoC + q.latoD;
}
public static void main(String[] args) {
Quadrilatero uno = new Quadrilatero(1, 1, 1, 1);
Rettangolo due = new Rettangolo(2, 3);
System.out.println(Quadrilatero.perimetro(uno));
System.out.println(Quadrilatero.perimetro(due));
}
}
class Rettangolo extends Quadrilatero {
public Rettangolo(int a, int b) {
super(a, b, a, b);
}
}
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
Nell'esempio da te riportato ha poco senso, oltre ad essere concettualmente errato dal mio punto di vista, in quanto il perimetro è una proprietà delle singole istanze di rettangolo o di quadrato, pertanto è corretto che sia implementato come metodo d'istanza. |
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: May 2015
Messaggi: 26
|
ok grazie.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:27.




















