Pytanie o rzutowanie klas

0

Mam dwie klasy, Test1 i Test2. Teraz:


public class Test1 {
    private int x = 1;
    protected Test1(){
        System.out.println("Test1 constructor");
    }
    public void method(){
        System.out.println("Test1 method");
    }
    public void method2(){
        System.out.println("Test1 method2");
    }
}

I


public class Test2 extends Test1 {
    protected Test2(){
        System.out.println("Test2 constructor");
    }
    public void method(){
        System.out.println("Test2 method");
    }
}

Metoda main:

public static void main(String[] args){
        Test2 t = new Test2();
        Test1 t2 = (Test1)t;
        t2.method();
        t2.method2();
    } 

Wyrzuca mi output w takiej kolejności:

Test1 constructor
Test2 constructor
Test2 method
Test1 method2 

Pytanie: dlaczego? Dlaczego jest wywoływany konstruktor testu1, skoro nie dałem super? Czy to mój Eclipse po prostu poprawia kod?
Inna sprawa - dlaczego wyrzuca mi "Test2 method" skoro w teorii t2 było zrzutowane na Test1?

0
  1. Jeśli nie napiszesz super() to automatycznie zostanie wywołany bezargumentowy konstruktor klasy bazowej. Jaki kontruktor bazowej klasy musi (!) zostać wywolany, inaczej relacja dziedziczenia byłaby tam bez sensu
  2. Lekcja na dziś: polimorfizm. "rzutowanie" na klasę bazową nic ci nie daje, bo obiekt wie że metoda została nadpisana w klasie pochodnej (warto stosować adnotację @Override)

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