# Kann man Private-Konstruktoren doch aurufen?



## KaffeeKlaus (18. Jan 2010)

Hallo, 

ich hab gerade mal das ausprobiert:


```
class TestSuper {
	public int num;

	protected TestSuper(int num) {
		this.num = num;
		System.out.println("TestSuper(int num) called");
	}
}

public class Test extends TestSuper {
	private Test(int num) {
		super(num);
		System.out.println("Test(int num) called");
	}

	public static void main(String... args) throws FileNotFoundException {
		Test t = new Test(1);		
		System.out.println(t.num);
	}
}
```

Ich hätte gedacht, dass in diesem Fall der Konstruktor der Test-Klasse unsichtbar ist, der Code aber trotzdem funktionert, weil der Konstruktor der Superklasse sichtbar ist. Demzufolge hätte ich erwartet, dass die Ausgabe nur 

```
"TestSuper(int num) called" 
1
```
ist. Die Ausgabe ist aber:

```
TestSuper(int num) called
Test(int num) called
1
```

Warum kann in diesem Fall doch ein private Konstruktor aufgerufen werden? Ich versteh das nicht ???:L


----------



## SlaterB (18. Jan 2010)

Konstruktoren werden nicht vererbt,

statische Methoden können private Methoden/ Konstruktoren derselben Klasse sehen 

es wird immer ein Konstruktor jeder Klasse der Vererbungshierarchie ausgeführt, nix übersprungen/ ausgelassen


----------



## Wortraum (18. Jan 2010)

Warum sollte man auf private Methoden und Konstrukturen nicht innerhalb der selben Klasse zugreifen können? Es ist gerade der Sinn, daß nur die Klasse darauf zugreifen kann, andere jedoch nicht.


----------



## nickname (18. Jan 2010)

hi,



			
				Wortraum hat gesagt.:
			
		

> Warum sollte man auf private Methoden und Konstrukturen nicht innerhalb der selben Klasse zugreifen können?


Das kann man doch!

Aber so wie du deinen Code dargestellt hast kann er eigentlich nicht funktionieren...



			
				slaterB hat gesagt.:
			
		

> es wird immer ein Konstruktor jeder Klasse der Vererbungshierarchie ausgeführt, nix übersprungen/ ausgelassen


bis hin zur Mutterklasse "Object".
Ich weiss das jetzt garnicht mehr. Läuft es bei der Instanzierung von oben nach unten oder umgekehrt ab ???:L Ist mir gerade irgendwie entfallen... 

gruß nickname


----------



## SlaterB (19. Jan 2010)

KaffeeKlaus hat gesagt.:


> Die Ausgabe ist aber:
> 
> ```
> TestSuper(int num) called
> ...


voll unklar, die Reihenfolge


----------



## nickname (19. Jan 2010)

:lol:

voll unklar. hab den Wald vor lauter Bäumen nicht gesehen...

Ist ja wie bei den exceptions, von allgm. bis ...


----------



## Wortraum (19. Jan 2010)

nickname hat gesagt.:


> Aber so wie du deinen Code dargestellt hast kann er eigentlich nicht funktionieren...


Meinen Code? Ich bin nicht Kaffeeklaus, bin mit ihm auch nicht verwandt.


----------



## DerEisteeTrinker (19. Jan 2010)

@Wortraum

weil die "private static void main..." in deiner Klasse drin steht und somit auch den privaten Konstruktor sieht. wenn du eine dritte Klasse mit einbaust, dann klappt der Spaß nicht mehr


----------



## KaffeeKlaus (19. Jan 2010)

SlaterB hat gesagt.:


> ...statische Methoden können private Methoden/ Konstruktoren derselben Klasse sehen...


Das wusste ich nicht, vielen Dank! Sorry für die späte Antwort...


----------

