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("Метод детета");
}
}
Дакле, уопштено, може се рећи да су конструктори методи који се не могу преписати у истом смислу као и обични методи.