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?
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.