dziedziczenie konstruktorów

0

Dlaczego konstruktor klasy A nie jest wywoływany przez dziedziczącą z nej klasę B?

public
class A
{
	public A()
	{
		System.out.println("A");
	}
}

public
class B extends A
{
	public B()
	{
		System.out.println("B");
	}
	public static void main (String args[])
	{
		B obiekt = new B();
	}
}
0

a nie trzeba przypadkiem w public B() dac na poczatku: super(); ?

0

O ile mi wiadomo konstruktor ktorego JEDYNĄ zawartością jest super(); jest dodawany jesli nie zostanie znalezniony Żaden inny konstruktor - u Ciebie klasa B ma konstruktor - więc o przechodzenie "wyżej" musisz zatroszczyć sie sam.

0

W tym przypadku powinno być tak:

 
public
class A
{
        public A()
        {
                System.out.println("A");
        }
}
 
public
class B extends A
{
        public B()
        {
                super(); // Wywołuje konstruktor klasy nadrzędnej (czyli klasy A)
                System.out.println("B");
        }
        public static void main (String args[])
        {
                B obiekt = new B();
        }
}

Zasady użycia super()

  1. Musi być pierwszą instrukcją konstruktora (tym samym możemy użyć jej tylko raz w danym konstruktorze)
  2. super( argumenty ) - wywoła ten z konstruktorów klasy bazowej, który przyjmuje te same argumenty ( patrz *przeciążanie konstruktorów. W tym przypadku masz tylko jeden bezargumentowy i wywoła właśnie ten)
1

super() musi byc pierwsza rzecza w konstruktorze,wzglednie jest wywolywane niejawnie, jesli superklasa ma konstruktor domyslny.
W kodzie w pierwszym poscie wszystko jest ok, nie wierze ze nie jest wywolywany konstruktor A.

Wlasnie testowalem kod, jest jak mowie - oba konstruktory sa wolane. To jest standardzik w javie.
Co innego dziedziczenie konstruktorow - nie ma czegos takiego, bo nie ma to sensu. Jezyki ktore cos takiego operuja (np groovy) implementuja to poprzez transformacje AST i automatyczne 'kopiowanie' konstruktorow klasy wyzszej.

0
dziki764 napisał(a)

Dlaczego konstruktor klasy A nie jest wywoływany przez dziedziczącą z nej klasę B?

Jak to nie jest?
Po uruchomieniu Twojego kodu dostaję:

A
B

Dodawanie super() w tym przypadku nie jest konieczne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1