"Hei, Amigo! Nå skal jeg fortelle deg om hvordan objekter blir til."

"Hva er så komplisert med det, onkel Rishi? Du skriver nytt og klassenavnet, angir riktig konstruktør, og du er ferdig!"

"Det er sant. Men hva skjer inne i objektet når du gjør det?"

"Hva skjer?"

"Dette er hva som skjer: Objektet lages i flere stadier."

1)  Først tildeles minne for alle klassens medlemsvariabler.

2)  Deretter initialiseres basisklassen.

3)  Deretter blir alle variablene tildelt verdier, hvis noen er spesifisert.

4)  Til slutt kalles konstruktøren.

"Det ser ikke veldig vanskelig ut: først variablene, så konstruktøren."

"La oss se hvordan dette fungerer i et eksempel med to klasser:"

Kode Beskrivelse
class Pet
{
 int x = 5, y = 5; ←-
 int weight = 10; ←-

 Pet(int x, int y)
 {
  this.x = x; ←-
  this.y = y; ←-
 }
}
class Cat extends Pet
{
 int tailLength = 8; ←-
 int age;
 Cat(int x, int y, int age)
 {
  super(x, y); ←-
  this.age = age; ←-
 }
}
Erklær to klasser: Pet(pet) og Cat(cat).

I Cat-klassen ser vi et eksplisitt kall til basisklassens konstruktør .
Den skal alltid være på den første linjen i konstruktøren.

Her er hva som skjer etter at minnet er tildelt:
18  – kall opp konstruktøren av basisklassen.
3, 4  – initialiser variabler i Pet.
8, 9  – utfør koden i Pet-konstruktøren.

Deretter begynner Cat-klassen å bli initialisert.
14  – initialiser variabler i Cat
19  – utfør koden i Cat-konstruktøren

public static void main(String[] args)
{
 Cat cat = new Cat (50, 50, 5);
}

"Det er litt forvirrende. Hvorfor er det så komplisert?"

"Det er faktisk ikke vanskelig hvis du vet hva som egentlig skjer:"

Hvis en klasse ikke har noen konstruktører, opprettes en automatisk.

Standard konstruktør
class Cat
{
 int x = 5;
 int y = 5;
}
class Cat
{
 int x = 5;
 int y = 5;
 public Cat() 
 {
 }
}

Hvis du ikke kaller opp basisklassekonstruktøren, blir den kalt automatisk.

Anrop av basisklassens konstruktør
class Pet
{
 public String name;
}
class Pet extends Object
{
 public String name;
 public Pet()
 {
  super();
 }
}
class Cat extends Pet
{
 int x = 5;
 int y = 5;
}
class Cat extends Pet
{
 int x = 5;
 int y = 5;
 public Cat()
 {
  super();
 }
}

Medlemsvariabler initialiseres i konstruktøren.

Initialisering av medlemsvariabler
class Cat
{
 int x = 5;
 int y = 5;
}
class Cat
{
 int x;
 int y;
 public Cat()
 {
  super();
  this.x = 5;
  this.y = 5;
  }
}
Hva skjer egentlig
class Pet
{
 int x = 5, y = 5;
 int weight = 10;
 Pet(int x, int y)
 {
  this.x = x;
  this.y = y;
 }
}

class Cat extends Pet
{
 int tailLength = 8;
 int age;
 Cat(int x, int y, int age)
 {
  super(x, y);
  this.age = age;
 }
}
class Pet extends Object
{
 int x;
 int y;
 int weight;

 Pet(int x, int y)
 {
  //call of the base class's constructor
  super();
  //initialize variables
  this.x = 5;
  this.y = 5;
  this.weight = 10;
  //execute the constructor code
  this.x = x;
  this.y = y;
 }
}
class Cat extends Pet
{
 int tailLength;
 int age;
 Cat(int x, int y, int age)
 {
  //call of the base class's constructor
   super(x, y);
  //initialize variables
  this.tailLength = 8;
  //execute the constructor code
  this.age = age;
 }
}

"Nå er det mye mer klart: først basisklassen, deretter variabler utenfor konstruktøren, deretter konstruktørkoden."

"Godt gjort, Amigo! Det er det!"