|
La classe Cerchio public class Cerchio
{
protected double raggio;
public Cerchio(double r) { raggio=r; }
public double diametro() { return 2*raggio; }
public double circonferenza() { return 2*Math.PI*raggio; }
public double area() { return Math.PI*raggio*raggio; }
}//Cerchio
public class Cilindro extends Cerchio
{
private double altezza;
public Cilindro(double r, double h)
{
super(r);
altezza=h;
}
public double area()
{
return 2*super.area()+
circonferenza()*altezza;
}
public double volume()
{
return super.area()*altezza;
}
}//Cilindro
La classe di test public class Test_C_C
{
public static void main(String[] args)
{
Cerchio ce=new Cerchio(4.0);
Cilindro ci=new Cilindro(4.0, 10.0);
System.out.println("Cerchio -> Area = " + ce.area() + "\n" +
" Circ = " + ce.circonferenza() + "\n" +
"Cilindro -> Area = " + ci.area() + "\n" +
" Circ = " + ci.circonferenza() + "\n" +
" Volu = " + ci.volume() );
}//main
}//Test_C_C
Osserva che super() // costruttore della superclasse super.area() // metodo della superclasse ci.circonferenza() // " ce=ci; // è legale, (ce instanceof Cilindro) --> true ce.area() // area() di Cilindro ci=ce; // non compilato ci=(Cilindro)ce; // compilato... ma: ClassCastException ...
opera(ce); // il parametro è un Cerchio
ce=ci;
opera(ce); // il parametro è un Cilindro!
}//main
static void opera(Cerchio obj)
{
System.out.println("Area = " + obj.area() + "\n" +
"Circ = " + obj.circonferenza() );
if(obj instanceof Cilindro)
{
Cilindro c=(Cilindro)obj;
System.out.println("Volu = " + c.volume());
}
}
}//Test_C_C
// il metodo opera indifferentemente con cerchi e cilindri...
|
|