Esercizio 1
Scrivere un programma in grado di istanziare un oggetto rappresentativo l'area di un rettangolo, assegnate base ed altezza dello stesso. Dalla stessa classe derivare una classe che descriva un oggetto parallelepipedo che utilizzi i metodi della classe per il calcolo dell'area per poter restituire il volume del solido.
Possiamo ipotizzare una classe A che usiamo per istanziare un generico rettangolo assegnate base ed altezza. Una seconda classe V estende la classe A ereditando ed utilizzando il metodo per il calcolo dell'area scritto nella classe A per calcolare il volume del parallelepipedo.
class solidi{
public static void main (String args []) {
V v = new V(5, 2, 3);
System.out.println(v.getV());
}//fine main
}// fine classe
class A {
private int x,y,area;
public void setA(int a, int b){
x=a;y=b;
mul();}
private void mul(){area=x*y;}
public int getA(){return area;}
}//fine classe A
class V extends A {
private int vol;
V(int a, int b, int c) {
setA(a,b);
vol = getA()*c;
}//fine costruttore
public int getV() {return vol;}
}//fine classe V
Notiamo che la classe A non ha un costruttore,
ma nessuno ci impedisce di istanziare oggetti di classe A.
Sarebbe sufficiente istanziare un oggetto di tale classe impostando successivamente
la sua base ed altezza col metodo setA(..).
A a=new A();
a.setA(5,2);
Se avessimo voluto preferire la presenza di un costruttore in tale classe potevamo scrivere:
class solidi{
public static void main (String args []) {
V v = new V(5,2,3);
System.out.println(v.getV());
}//fine main
}// fine classe
class A {
private int x,y,area;
A(int a,int b){x=a;y=b;mul();}
private void mul(){area=x*y;}
public int getA(){return area;}
}//fine classe A
class V extends A {
private int vol;
V(int a, int b, int c) {
super(a,b);
vol = getA()*c;
}//fine costruttore
public int getV() {return vol;}
}//fine classe V
Lo stesso programma può funzionare anche senza condizioni di ereditarietà; dipende dalle esigenze.
class solidi{
public static void main (String args []) {
A a=new A(5,2);
V v = new V(a,3);
System.out.println(v.getV());
}//fine main
}// fine classe
class A {
private int x,y,area;
A(int a,int b){
x=a;y=b;
mul();
}
private void mul(){area=x*y;}
public int getA(){return area;}
}//fine classe A
class V{
private int vol;
V(A a, int c) {
vol = a.getA()*c;
}//fine costruttore
public int getV() {return vol;}
}//fine classe V
In questo caso esistono oggetti di classe A che possono descrivere aree di vari rettangoli. Per ottenere degli oggetti parallelepipedo basta istanziare un oggetto di classe A che descrive la base del parallelepipedo e passarla al costruttore della classe V assieme all'altezza del solido desiderato.