OOP Vererbung von Methoden
foomaker
- php
Moin.
Kann man Methoden einer Elternklasse 'public' machen und gleichzeitig sie vor der Vererbung an eine Kindklasse bewahren?
Beispiel:
class a
{
...
public function funca()
{
...
}
}
class b extends a
{
...
public function funcb()
{
...
}
}
$objb=new b();
$objb->funca(); // DAS soll NICHT möglich sein. Aber wie?
Ich vermute bereits, dass Vererbung heisst "Entweder richtig 'private' oder eben nur vererbt ('protected') oder vererbt UND öffentlich ('public')".
Oder gibt es eine Lösung?
fragt sich der foomaker
echo $begrüßung;
Kann man Methoden einer Elternklasse 'public' machen und gleichzeitig sie vor der Vererbung an eine Kindklasse bewahren?
Es gibt das Schlüsselwort final. Damit kann man Methoden vor dem Überschreiben schützen. (Auch Klassen vor dem Vererben, aber das brauchst du ja grad nicht.) Wie aber immer bei PHP sind solche und ähnliche einschränkende Features nur als Hinweis zu verstehen, denn wenn es dem anwendenden Programmierer nicht passt, kann er ja einfach den Quelltext ändern.
$objb=new b();
$objb->funca(); // DAS soll NICHT möglich sein. Aber wie?
Vor dem Aufrufen schützt das final nicht. Auch ein Zurückstufen der Sichtbarkeit ist nicht möglich. Wenn es wirklich wichtig ist, dass man diese Funktion nicht aus b-Objekten aus aufrufen darf, dann überschreib die Methode und wirf eine Exception. Oder ändere deine Vererbungshierarchie, so dass nicht b von a erbt sondern beide von einer grundlegenden Klasse. a wird dann erweitert um funca, b jedoch nicht.
echo "$verabschiedung $name";
Hallo dedlfix,
Danke für die gute Erklärung.
Neue übergeordnete Elternklasse, die lediglich allen Kindelementen gemeinsame Methoden zur Verfügung stellt, ist wohl die Lösung.
Und die dann 'abstract', also ohne die Möglichkeit, eine Instanz zu bilden.
Vielen Dank und Gruß
vom foomaker