^ Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31 ^|
| [[java:java-klasser-indkap|forrige]] | Kapitel 5. Definition af klasser | [[java:java-klasser-dice|næste]] |
----
==== 5.3. Konstruktører ====
En konstruktør (eng.: constructor) er en speciel metode, der har samme navn som klassen. Den kaldes automatisk ved oprettelse af et objekt med 'new'-operatoren og benyttes oftest til at klare forskellige former for initialisering af det nye objekt.
Som vi så i forrige kapitel (i tilfældet med Rectangle, Point og Date), kan man have flere konstruktører for en klasse, bare parameterlisterne er forskellige.
Her kommer et eksempel med nogle konstruktører:
**Figur 5-3. Java**
{linuxbog:java:Nordfalk615385.png}
public class Boks3
{
private double længde;
private double bredde;
private double højde; //public Boks3()// {
System.out.println("Standardboks oprettes");
sætMål(10, 10, 10);
} //// En anden konstruktør der tager bredde, højde og længde// //public Boks3(double lgd, double b, double h)// {
System.out.println("Boks oprettes med lgd="+lgd+" b="+b+" h="+h);
sætMål(lgd,b,h);
}
public void sætMål(double lgd, double b, double h)
{
if (lgd<=0 || b<=0 || h<=0)
{
System.out.println("Ugyldige mål. Bruger standardmål.");
længde = 10.0;
bredde = 10.0;
højde = 10.0;
} else {
længde = lgd;
bredde = b;
højde = h;
}
}
public double volumen()
{
return længde*bredde*højde;
}
}
Bemærk:
> En konstruktør erklæres som en metode med samme navn som klassen
> En konstruktør har ingen returtype - ikke engang 'void'
I ovenstående eksempel er der defineret to konstruktører:
public Boks3()
public Boks3(double lgd, double b, double h)
Vi prøver Boks3 med:
public class BenytBoks3
{
public static void main(String args[])
{
Boks3 enBoks; //// brug konstruktøren uden parametre// enBoks = //new Boks3()// ;
System.out.println("Volumen er: "+ enBoks.volumen());
Boks3 enAndenBoks; //// brug den anden konstruktør// enAndenBoks = //new Boks3(5,5,10)// ;
System.out.println("Volumen er: "+ enAndenBoks.volumen());
}
}
Standardboks oprettes
Volumen er: 1000.0
Boks oprettes med lgd=5.0 b=5.0 h=10.0
Volumen er: 250.0
=== 5.3.1. Standardkonstruktører ===
Når vi i de foregående eksempler (f.eks. Boks2) ikke har benyttet en konstruktør, er det, fordi Java, hvis ikke en konstruktør er erklæret, selv erklærer en tom standardkonstruktør uden parametre. Dvs. Java i Boks2's tilfælde usynligt har defineret konstruktøren:
public Boks2()
{
}
Denne konstruktør har vi kaldt, hver gang vi har oprettet et objekt med 'new'.
> Der kaldes altid en konstruktør, når et objekt oprettes
> Standardkonstruktøren genereres automatisk, hvis der ikke er andre konstruktører i klassen
En standardkonstruktør genereres kun, hvis der ikke er andre konstruktører i klassen.
Hvis vi ikke havde defineret en konstruktør uden parametre i Boks3, ville oversætteren i BenytBoks3 brokke sig over, at denne type konstruktør ikke fandtes:
BenytBoks3.java:7: No constructor matching Boks3() found in class Boks3.
enBoks = new Boks3();
=== 5.3.2. Opgaver ===
- Definér klassen Pyramide. Objekterne skal have variablerne //side// og //højde// (definér en konstruktør) og en metode til at udregne volumen (side*side*højde/4). Skriv en BenytPyramider, som opretter 3 pyramider og udregner volumen.
- Ret Boks3 til også at have variablen massefylde, og definér en ekstra konstruktør der også tager massefylden (den oprindelige konstruktør med lgd, b og h kan sætte massefylden til 1). Lav også metoder til at sætte massefylden, sætMassefylde(double m), og udregne vægten, vægt(). Test din klasse med en ændret udgave af BenytBoks3.
----
| [[java:java-klasser-indkap|forrige]] | [[java:index|hjem]] | [[java:java-klasser-dice|næste]] |
| Indkapsling | [[java:java-klasser|op]] | En Terning-klasse |