Föreläsningar  Lektioner  Examination  Länkar  <<

Uppgift2 ska lösas med polymorfism och överskuggning. Ett antal 3D-volymer ska lagras i en array och sedan plockas ut och volymberäknas. Så att samtliga ärvande klasser verkligen får en egendefinierad metod för volymberäkning ska den abstrakta basklassen MIVolym ha en:
public abstract double visaVolym();

Specialiseringar av basklassen ska sedan ske till klasserna Kub, Klot och Cylinder. Metoden visaVolym() ska överskuggas med passande formel för volymberäkning i de ärvande klasserna. Detta för att samtliga klasser ska veta hur de ska visa sin volym enligt principen för dynamisk bindning.

VOLYMEN FÖR EN RAK CIRKULÄR CYLINDER = Π * h * r 2

Alla klasser ska ha två konstruktorer. En som enbart tar de parametrar som är nödvändiga för själva volymberäkningen samt en ytterligare som även tar emot ett värde för färgen på 3D-volymen. Samtliga attribut ska deklareras som private och kompletteras med åtkomstmetoder. De av klassernas konstruktorer som saknar inparametrar för färgangivelse ska sätta klassens attribut till standardfärgen "grå".

DEL A: Rita upp ett klassdiagram för din lösning med hjälp av Rational Rose eller alternativt med verktyget ArgoUML.

DEL B: Implementera detta i javakod och en komplett lösning ska även innehålla en kontainerklass där två objekt av varje subklass läggs in i en MIVolym[]. Klassen kan heta Uppgift2 och inledas enligt:
MIVolym[] mivolym = new MIVolym[6];
mivolym[0] = new Klot(2.5);
mivolym[1] = new Kub(3.0, "gul");

En av poängerna med den dynamiska bindningen är att när objekten i arrayen ska hämtas ut för summering av volymen, så kan detta göras med en referens till ett objekt av basklassen MIVolym. Totalsumman av samtliga objekts volym ska skrivas ut med 3 decimalers noggrannhet. Ett sätt att formatera svaret är med hjälp av klassen:
java.text.DecimalFormat