Särkyvä kantaluokka () on olio-ohjelmointikielen arkkitehtuurinen ongelma, jossa kantaluokkia pidetään "särkyvinä", koska näennäisen turvalliset muutokset perusluokkaan voivat aiheuttaa ongelman kantaluokasta perityssä luokassa. Tämä ongelma voi aiheutua silloin, kun ohjelmassa on esimerkkikoodin 1 mukai- nen rakenne. Särkyvä kantaluokka -ongelma saadaan aikaan esimerkiksi muuttamalla esimerkkikoodin 1 kantaluokka vastaamaan esimerkkikoodin 2 kantaluokkaa. Kun kut sutaan perityn luokan foo-metodia, aiheutuu ikuisesti rekursiivinen silmukka, mikä ai- heuttaa pinomuistin ylivuotamisen.

Java esimerkki Alla oleva esimerkki on kirjoitettu Java (ohjelmointikieli) ja se kuvaa tilanteen, jossa näennäisesti turvallinen muutos kantaluokkaan aiheuttaa loputtoman rekursion ja aiheuttaa Pinon ylivuotovirheen. class Super { private int counter = 0;

void inc1() { counter++;

void inc2() { counter++;

class Sub extends Super { @Override void inc2() { inc1();

Korvatun menetelmän inc2() kutsuminen perityssä Sub luokassa kasvattaa oikein counter muuttujan arvoa yhdellä. Mikäli kantaluokkaan tehdään seuraavalainen muutos: class Super {

private int counter = 0;

void inc1() { inc2();

void inc2() { counter++;

Tämän muutoksen jälkeen korvatun menetelmän inc2() kutsuminen perityssä Sub luokassa aiheuttaa loputtoman rekursion itsensä ja kantaluokan inc1 metodin kanssa ja ajautuu lopulta Pinon ylivuotovirheeseen.

Lähteet

Luokka:Olio-ohjelmointi