Särkyvä kantaluokka

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 

Olio-ohjelmointi