Hirdetés

Új hozzászólás Aktív témák

  • fatal`
    titán

    public class Main {
    public static void main(String[] args) {
    A c = new B();
    c.say();
    System.out.println(c.num);
    }
    }

    class A {
    int num = 7;

    void say(){
    System.out.println("A");
    }
    }

    class B extends A {

    int num = 8;

    void say(){
    System.out.println("B");
    }
    }

    Hi!
    A fenti kodnal a c.num miert 7? Az override-olt metodus az ok, hogy dinamikusan a peldanyhoz köti, de a peldanyvaltozot mint ha statikusan kötne.
    Kicsit belezavarodtam. Vki pls irjon mar par sort erröl.
    köszi elöre is!

    Ez gondolom valami iskolai példa :D

    Fieldet nem lehet overrideolni, ilyenkor elrejted őket (gyakorlatilag függetlenül léteznek a memóriában). Mivel a c objektumod "A" típusú, ezért kiíráskor az A.num-ot írod ki. Ha átcastolod "B"-re a "c" objektumot, az eredmény 8 lesz.

    Alapvetően ilyet nem csinálunk, szerintem egy normális IDE talán warningot is dob erre (de ebben nem vagyok biztos, rég nem javaztam).

    A megfogalmazás nagyon messze van a pontostól, valószínűleg, akik napi szinten javaznak, majd kijavítanak/pontosítanak.

    Illetve stackoverflow link a témában: [link]

Új hozzászólás Aktív témák