kan man disabla en Metod i base från en ärvd klass?
Exempel:
public class Person{
public Person(){}
public virtual Person GetKusin(){
return new Kusin();
}
}
//klass som ärver, men däri vill jag disabla GetKusin()
public class Kusin: Person{
public Kusin(){}
public override Person GetKusin(){
// vill inte ha denna på Kusin
}
}
Alltså vill jag inte ha GetKusin på Kusin. Skulle vilja ändra "public" till private i Person-klass, typ...
Nu får väl någon rätta mig om jag har fel, men är det verkligen "kosher objektorientering" att låta Person klassen se Kusin, som ärver Person?
Metoden GetKusin() borde inte finnas i Person.
Person-klassen är föräldern och där ska det väl inte finnas några funktioner som "anropar" eller använder "barnen"?
Nej, det går inte. Rent objektorienteringsmässigt finns det ingen anledning att tillåta det, eftersom poängen med arv är att man vet att allt som finns i superklassen även finns i subklassen. Annars får man sjukt jobbiga exekveringsfel av kod i stil med den här:
public skrivKusin(Person p){
print(p.getKusin());
}
...
Kusin k = new Kusin();
skrivKusin(k);
Alltså, det faktum att metoden "finns kvar" efter arv är inte en bieffekt, utan själva definitionen av arv. Allt som finns i typ A måste finnas i typ B för att B ska vara en subtyp av A. Att bara delvis ärva är inget arv, med andra ord :)
I dynamiska OO-språk (Python, Javascript etc) är det toklätt att ta bort metoder och liknande. Fast man gör det liksom ändå inte.
261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e