1 svar
152 visningar
gulfi52 896 – Fd. Medlem
Postad: 1 maj 2017 14:20

Arv

Om man har en subclass som ärver av en superklass och det i en konstruktor i superklassen finns ett attribut som får ett startvärde - kan man deklarera samma attibut i subklassen, låta det där få ett annat värde än det får i superklassen - och då överskuggas superklassens attribut så subklassens "variant" av attributet blir det som gäller?

Porchy 21
Postad: 1 maj 2017 21:44

Har endast sysslat med C++ och Java som objektorienterade språk, men i båda språken så körs endast konstruktorn i subklassen när du skapar ett nytt objekt, så du kommer automagiskt att överskugga värdet i superklassen.

Om du önskar att köra superklassens konstruktor så måste du explicit skriva det i den nya konstruktorn i subklassen.

Ex i java:

class A {
    private int Value;
    protected int Value2;
    public A(int startValue) {
         Value = startValue;
         Value2 = 5;
    }
}

//Ex 1
class B extends A {
    private int anotherValue;
    public B(int startValue) {
         Value2 = 10;
    }
}

//Ex 2
class C extends A {
     private int anotherValue;
     public B(int startValue) {
          super(startValue);
          anotherValue = startValue;
    }
}

Värt att notera är att du kan ha flera konstruktorer med olika sett att hantera det här i subklassen och att i Ex1 så sätts aldrig Value.

I Ex1 så kommer privateValue2's definiering att överskuggas av subklassen och bli 10, medan i Ex2 så kommer konstruktorn i subklassen kalla på superklassens konstruktor och sedan inte överskugga värdet.

Det går även att kalla på superklassens konstruktor först och sedan överskugga specifikt 1 av värdena.

Svara
Close