Spezialfrage Überschreiben von Methoden

MQue

Top Contributor
Hi,

hätte eine Spezialfrage zum Überschreiben von Methoden - um die Sinnhaftigkeit geht es mir in erster Linien nicht!

Also ich habe eine Basisklasse - Basic - und eine abgleitete Klasse Sub.
In Sub wird die Methode test überschrieben.

Ich erzeuge jetzt 2 Objekte:

Java:
 Basic b = new Sub();
        b.test();

        Sub s = new Sub();
        s.test();

Hab ich jetzt irgendeine Change (mit irgendwelchen Mitteln - erlaubt oder unerlaubt) dass ich von "b" oder "s" "nur" die Methode der Klasse Basic aufrufe von aussen? Also nicht mit super() in der Methode der abgleiteten Klasse sondern mit der Referenz b oder s von oben?
(in C# geht das übrigens - so abwegig ist das nicht)


Java:
public class OverrideTest {

    public OverrideTest() {
        Basic b = new Sub();
        b.test();

        Sub s = new Sub();
        s.test();
        }

    public static void main(String[] args) {
        new OverrideTest();    
        }
    
    class Basic {

        public Basic() {}
        
        public void test() {
            System.out.println("test Basic");
            }
        }
    
    class Sub extends Basic {

        public Sub() {}
        
        @Override
        public void test() {
            System.out.println("test Sub");
            }
        }
    }
 

Kevin94

Top Contributor
Mit "normalen" Mitteln ist das unmöglich. Ich denke es sollte mit Reflections gehen, bin mir aber nicht sicher, das musst du ausprobieren.
 
S

SlaterB

Gast
meines Wissens gibt es da keine Chance und ich beobachte die gelegentlichen Themen dazu hier im Forum relativ interessiert

extrem wäre natürlich, ein zweites Objekt der Oberklasse zu erstellen, alle relevanten Instanzattribut-Werte per Reflection zu kopieren, dort die Methode auszuführen und dann die Daten zurück
 
M

Marcinek

Gast
Liegt hier nicht dann ein Designfehler vor?

Offensichtlich hätte in diesem Fall test() nicht überschrieben werden dürfen.

Das kann man mit final verhindern.
 

MQue

Top Contributor
Liegt hier nicht dann ein Designfehler vor?

Offensichtlich hätte in diesem Fall test() nicht überschrieben werden dürfen.

Das kann man mit final verhindern.

Um das gehts mir nicht - mir ist klar dass man darüber streiten kann ob man das nicht anders macht bzw.. ob man das jemals braucht.

Mir wäre es nur um das gegangen, ob es möglich ist die Methode der Basisklasse aufzurufen oder nicht.
Aber es hat mich bestätigt dass das in Java nicht funktioniert.

lg
MQue
 

fastjack

Top Contributor
Schreib einfach eine neue anders benamte Methode, die nur den super Aufruf macht.

Java:
class Sub extends Basic {
    public Sub() {}
    @Override
    public void test() {
        System.out.println("test Sub");
    }

    public void plainTest() {
        super.test();
    }
}
 

turtle

Top Contributor
Das das nicht geht wurde ja schon beantwortet...

Du kannst aber zwei Methoden schreiben, von denen Du nur eine überschreibst. Entscheide dann welche Du aufrufst.
 
S

SlaterB

Gast
@fastjack/ Marcinek/ edit: zum Teil auch turtle ;)

man kann auch gewisse Zeichen lesen und auf überflüssige offensichtlich bekannte Nebenlösungen/ Alternativvorgehensweisen verzichten,
oder wenigstens dazuschreiben 'wer immer auch sonst irgendwann mal hier vorbeikommt, könnte nützlich finden: ..'

es gibt ganz einfach feste Situationen, etwa wenn in Framework X Klasse Oben + Unten fest implementiert und eingebunden sind,
dass nur exakt unter Ausschluss der normalen Alternativen gefragt wurde war/ ist doch ziemlich deutlich
 
P

Pippl

Gast
Hab ich jetzt irgendeine Change (mit irgendwelchen Mitteln - erlaubt oder unerlaubt) dass ich von "b" oder "s" "nur" die Methode der Klasse Basic aufrufe von aussen? Also nicht mit super() in der Methode der abgleiteten Klasse sondern mit der Referenz b oder s von oben?
(in C# geht das übrigens - so abwegig ist das nicht)

Also in C# würde ich es so machen und in Java geht das glaub ich auch (habs aber nicht getestet, außerdem ist mir c# vertrauter als java, also nicht schlagen wenns blödsinn is :oops:)
Java:
public OverrideTest() 
{
    Basic b = new Sub();
    b.test();
 
    Sub s = new Sub();
    ((Basic)s).test();
}

es sollte sich ja dann um ein Basic Objekt handeln und die test Methode aufrufen.
 

MQue

Top Contributor
Also in C# würde ich es so machen und in Java geht das glaub ich auch (habs aber nicht getestet, außerdem ist mir c# vertrauter als java, also nicht schlagen wenns blödsinn is :oops:)
Java:
public OverrideTest() 
{
    Basic b = new Sub();
    b.test();
 
    Sub s = new Sub();
    ((Basic)s).test();
}

es sollte sich ja dann um ein Basic Objekt handeln und die test Methode aufrufen.


Ob das funktioniert kommt ganz darauf an ob du die Methode in der Basisklasse virtual machst und die überschreibende Methode "override" oder nicht. Wenn du das machst hilft dir das casten in C# nichts und auch in Java nicht - da alle Methoden in Java virtual sind.
Wenn du virtual und override in C# weglässt dann funktionierts - aber dann sind das auch 2 verschiedene Methoden - soweit mein wissensstand.
 
S

SlaterB

Gast
> es sollte sich ja dann um ein Basic Objekt handeln und die test Methode aufrufen.

da ich hier sowieso schon meckere ;) :
wieso nicht einfach selber kurz testen und vorher erkennen, dass du etwas falsches posten wirst?

> (habs aber nicht getestet, außerdem ist mir c# vertrauter als java, also nicht schlagen wenns blödsinn is )

darf der Bankräuber in die Bank gehen wenn er vorher 'bitte nicht festnehmen' sagt? ;)
 
P

Pippl

Gast
ok aber in c# würde ich dann die methode mit new überdecken statt zu überschreiben.
aber wird sind ja hier bei java, und da bin ich mir nicht sicher wie es da ausschaut mit virtual usw.
 
P

Pippl

Gast
> es sollte sich ja dann um ein Basic Objekt handeln und die test Methode aufrufen.

da ich hier sowieso schon meckere ;) :
wieso nicht einfach selber kurz testen und vorher erkennen, dass du etwas falsches posten wirst?
psst ;) leider kein ide wo ichs schnell testen könnte und console is mir zu mühsam


> (habs aber nicht getestet, außerdem ist mir c# vertrauter als java, also nicht schlagen wenns blödsinn is )

darf der Bankräuber in die Bank gehen wenn er vorher 'bitte nicht festnehmen' sagt? ;)
ein versuch is es wert


EDIT: sry für den doppelpost, wollte es eigentlich an den vorherigen anfügen
 
Zuletzt bearbeitet von einem Moderator:

Nardian

Bekanntes Mitglied
Ob das funktioniert kommt ganz darauf an ob du die Methode in der Basisklasse virtual machst und die überschreibende Methode "override" oder nicht. Wenn du das machst hilft dir das casten in C# nichts und auch in Java nicht - da alle Methoden in Java virtual sind.
[...]

In meinen Augen ist das schon die ganze Antwort, nicht?
In Java sind ja alle Methoden (wie im Zitat erwähnt) virtuell. Das heißt, die Instanz b hat nur eine einzige Funktion test(), und nicht 2 (die von Sub und die von Basic). Demnach hat b einfach keinerlei Möglichkeit auf Basic.test zuzugreifen. Innerhalb von Sub kann man durchaus auch mit "super" die Überschriebene Funktion aufrufen. Von außerhalb hat man da keine Möglichkeit (was eigentlich sogar Sinn macht, da man sonst die Funktionalität der aktuellen Instnaz aushebeln könnte - was wohl nicht der Sinn der "Erweiterung" war).

Lg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Spezialfrage zu Strings Allgemeine Java-Themen 11
L spezialfrage arraylist -_- anfänger Allgemeine Java-Themen 5
F Spezialfrage zu Date Allgemeine Java-Themen 5
LimDul XSD To Java - Überschreiben von Assoziationen Allgemeine Java-Themen 1
C Überschreiben mit kontravariante Parameter Allgemeine Java-Themen 13
T Überschreiben von Methoden Allgemeine Java-Themen 6
K Überschreiben von Variablen bei rekursivem Funktionsaufruf Allgemeine Java-Themen 2
M Überschreiben der clone()-Methode Allgemeine Java-Themen 10
A OOP: Überschreiben/Implementierung von Methoden Allgemeine Java-Themen 5
T Überschreiben von Methoden erzwingen Allgemeine Java-Themen 20
T Direktes Überschreiben Allgemeine Java-Themen 7
J Überschreiben von Variablen Allgemeine Java-Themen 3
vogella Überschreiben von equals und hashcode für Collection Allgemeine Java-Themen 7
M Überschreiben? Allgemeine Java-Themen 3
A FileChooser Datei-Überschreiben Abfrage Allgemeine Java-Themen 2
K Überschreiben von 'static'-Methoden hat anderes Verhalten? Allgemeine Java-Themen 2
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
B Arrays von Methoden möglich? Allgemeine Java-Themen 44
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
N abstracte klassen methoden Allgemeine Java-Themen 32
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
B Methoden Java Getter und Setter Methoden Allgemeine Java-Themen 9
Y Java Methoden unterschiedliche Zahlenreihen Allgemeine Java-Themen 2
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
D Methoden Methoden anpassen und fehlende Funktionen hinzufügen Allgemeine Java-Themen 475
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
R Statistische Methoden (Mathematik) Aufgabe Allgemeine Java-Themen 9
X Brüche kürzen mittels Methoden und ggT Allgemeine Java-Themen 15
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
L mehrere Methoden Allgemeine Java-Themen 19
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
A Automatisches Methoden Laufzeiten logging? Allgemeine Java-Themen 7
M Quellcode von Java-Methoden Allgemeine Java-Themen 9
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
Q-bert Methoden Methoden in Java Allgemeine Java-Themen 13
D Methoden Java-Aufgabe Allgemeine Java-Themen 2
M Compiler-Fehler Methoden-Referenz Allgemeine Java-Themen 5
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
F Enum-werte als Methoden-Parameter übergeben Allgemeine Java-Themen 6
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
E OOP Objekte und Methoden Allgemeine Java-Themen 1
K Java ruft Methoden nicht der Reihe nach auf Allgemeine Java-Themen 14
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
T Java Array in Methoden Allgemeine Java-Themen 1
D Code für bereitgestellte Methoden Allgemeine Java-Themen 1
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
A Methoden verändern Allgemeine Java-Themen 12
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
J Best Practice Testen von protected Methoden Allgemeine Java-Themen 7
L Methoden "Schiffe versenken" Quellcode in Methoden umwandeln Allgemeine Java-Themen 6
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
Sogomn Best Practice "Doppelte" Methoden Allgemeine Java-Themen 3
Paul15 String Methoden Allgemeine Java-Themen 7
G Methoden BMI -Wert Aufgabe(Methoden) Allgemeine Java-Themen 4
F Testen von Methoden Allgemeine Java-Themen 3
S "Vererben" statischer Felder/Methoden Allgemeine Java-Themen 4
F Methoden in der Enumeration Klasse Allgemeine Java-Themen 1
S Methoden ohne Methodenkopf ?! Allgemeine Java-Themen 5
M Methoden werden in falscher Reihenfolge bearbeitet Allgemeine Java-Themen 10
S Methoden Methoden überschreiben Allgemeine Java-Themen 3
N Threads statische Methoden in Threads Allgemeine Java-Themen 5
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
S Methoden Frage Allgemeine Java-Themen 2
R Wie kann man diese Methoden in arrays etablieren? Allgemeine Java-Themen 8
M Methoden in Rescources speichern Allgemeine Java-Themen 4
G Synchronisation nicht statischer Methoden Allgemeine Java-Themen 4
A Vererbung finale Methoden überschreiben Allgemeine Java-Themen 24
A Methoden parallelisieren? Allgemeine Java-Themen 2
L Methoden methoden an generischen klassentyp anpassen Allgemeine Java-Themen 5
C Methoden Übernahme von standart nativen Methoden? Allgemeine Java-Themen 9
B Zusammenfassen verschiedener ähnlicher Methoden Allgemeine Java-Themen 8
K JNI: Methoden aus unterschiedlichen Threads aufrufen Allgemeine Java-Themen 3
P Unterschiedliche Clone- Methoden Allgemeine Java-Themen 5
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
MiMa Rekursive Methoden Allgemeine Java-Themen 3
S Programm das alle aufgerufenen Methoden ausgibt..? Allgemeine Java-Themen 6
F ListIterator (next & previous methoden) Allgemeine Java-Themen 5
W Frage zu Refactoring statischer Methoden Allgemeine Java-Themen 4
M Methoden/Klassen für andere Projekte Allgemeine Java-Themen 4
T Methoden per String-Namen aufrufen Allgemeine Java-Themen 2
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
A Methoden ohne Referenzen finden Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben