|
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 La classe Cilindro estende la classe 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... |
|