Sobes.tech
Middle

Koju metod ne može biti prepisan u objektno-orijentisanom programiranju?

sobes.tech АИ

Одговор од АИ

У неким језицима, као што је Ruby, метод класе initialize, који се користи за иницијализацију нових објеката, не може се директно позвати у подкласи као super.initialize да би се извршила логика родитељске класе. Уместо тога, подкласа треба јасно да позове метод super у својој имплементацији initialize, што аутоматски позива метод initialize родитељске класе.

У другим језицима, као што су Java или C#, не постоје "кориснички" методи који се не могу преписати у традиционалном смислу, јер сваки јавни или заштићени (!) метод који није означен као final (Java) или sealed (C#), може бити преписан. Међутим, може се сматрати да су конструктори посебан тип "метода" који се не може преписати у обичном смислу: не може се декларативно дефинисати метода са истим именом и сигнатуром унутар подкласе која би заменила конструктор родитељске класе. Подкласа може имати своје сопствене конструкторе, који, с друге стране, позивају конструкторе родитељске класе преко super (Java) или : base (C#).

class Parent {
    Parent() {
        System.out.println("Конструктор родитеља");
    }
    void method() {
        System.out.println("Метод родитеља");
    }
}

class Child extends Parent {
    Child() {
        // Јавни позив конструктора родитеља није потребан,
        // ако нема параметара - позива се аутоматски.
        System.out.println("Конструктор детета");
    }
    @Override // Преписивање методе је могуће
    void method() {
        System.out.println("Метод детета");
    }
}

Дакле, уопштено, може се рећи да су конструктори методи који се не могу преписати у истом смислу као и обични методи.