Sobes.tech
Middle

Kuru metodi objektorientētajā programmēšanā nav iespējams pārrakstīt?

sobes.tech AI

Atbilde no AI

Dažās valodās, piemēram, Ruby, klases initialize metode, kas tiek izmantots jaunu objektu inicializācijai, tieši nevar izsaukt bērnu klasē kā super.initialize, lai izpildītu vecāku klases loģiku. Tā vietā bērnu klasei jāizsauc super metode savā initialize realizācijā, kas automātiski izsauks vecāku klases initialize metodi.

Citās valodās, piemēram, Java vai C#, nav "nepārdefinējamu" lietotāja metožu tādā nozīmē, ka jebkurš publisks vai aizsargāts (!) metode, kas nav atzīmēta kā final (Java) vai sealed (C#), var tikt pārdefinēta. Tomēr var uzskatīt, ka konstruktori ir īpašs "metoda" tips, kuru nav iespējams pārdefinēt tāpat kā parastos metodes - nav iespējams deklarēt metodi ar to pašu nosaukumu un signatūru bērnu klasē, kas aizstātu vecāku konstruktoru. Bērnu klase var saturēt savus konstruktorus, kas savukārt izsauc vecāku konstruktorus ar super (Java) vai : base (C#).

class Parent {
    Parent() {
        System.out.println("Vecāku konstruktors");
    }
    void method() {
        System.out.println("Vecāku metode");
    }
}

class Child extends Parent {
    Child() {
        // Tiešs vecāku konstruktora izsaukums nav nepieciešams,
        // ja nav parametru - tas tiek izsaukts automātiski.
        System.out.println("Bērnu konstruktors");
    }
    @Override // Metode var tikt pārdefinēta
    void method() {
        System.out.println("Bērnu metode");
    }
}

Tādējādi, kopumā, konstruktors var uzskatīt par metodi, kuru nav iespējams pārdefinēt tāpat kā parastos metodes.