# Oberbergriff für class und interface



## Evolver (25. Mai 2007)

Ich suche einen Oberbegriff für 'class' und 'interface'. Asl wie würdet ihr eine Klasse nenn, von der die Klasse MyClass und MyInterface erben?


----------



## SlaterB (25. Mai 2007)

Interface ist der Oberbegriff von Klasse,

also MyClass würde von MyInterface erben


----------



## Leroy42 (25. Mai 2007)

:shock: 

Ein Interface kann doch gar nicht von einer Klasse erben.


----------



## Jango (25. Mai 2007)

Basisklasse, Elternklasse, Typen, ...


----------



## Evolver (25. Mai 2007)

> also MyClass würde von MyInterface erben



Nicht so wirklich in meinem Kontext.


----------



## André Uhres (25. Mai 2007)

Evolver hat gesagt.:
			
		

> Ich suche einen Oberbegriff für 'class' und 'interface'. Asl wie würdet ihr eine Klasse nenn, von der die Klasse MyClass und MyInterface erben?


Ein "Oberbegriff" hat imho nix mit "erben" zu tun! Der Oberbegriff für 'class' und 'interface' ist: '*type*'


----------



## Murray (26. Mai 2007)

Leider sind die Begriffe in Java nicht so sauber getrennt; in der API-Doku zum java.lang.Class steht

Instances of the class *Class* represent *classes* and *interfaces* in a running Java application.

Es werden also Klassen und Interfaces über die Klasse Class abgebildet; ergo sind Interfaces in gewissem Sinne Klassen.
M.E. ist der beste gemeinsame Oberbegriff hier Typ(e) - in der Java-API findet sich das z.B. wieder in java.lang.reflect.Field#getType, was ein Object vom Typ java.lang.Class liefert (auch wenn die entsprechende Variablendeklaration ein Interface (und keine Klasse) referenziert).


----------



## Evolver (30. Mai 2007)

Type gefällt mir nicht so schön, zwischenzeitlich hatte ich es jetzt anders gelöst.
Was würdet ihr von "Struktur" halten? MyClass und MyInterface erben von MyStructure.


----------



## function (30. Mai 2007)

bei dem begriff "Struktur" denke ich zuerst einmal an ein UML-Diagramm, dass die Basis Architektur den Programmes darstellt.


----------



## kleiner_held (30. Mai 2007)

Also ich kenne auch Type als den in Java ueblichen Oberbegriff.


----------



## Gast (30. Mai 2007)

'type' ist der oberbegriff für datentypen. eine klasse oder interface ist kein typ, sondern die referenz auf eine instanz einer klasse ist ein 'type'.

MyClass c = new MyClass();

hier ist c ein 'type', nämlich eine referenz bzw. ein pointer.

der oberbegriff für class und interface ist schlicht "objekt". denn im grunde sind class und interface identisch. interface ist lediglich ein sondertyp von class, bei dem alle methoden abstract sind.

man könnte jetzt drüber streiten, ob man ein interface als objekt bezeichnen darf, da man von interfaces keine exemplare bzw. instanzen erzeugen kann, was manche als wichtiges merkmal eines objekts betrachten. da dies für die grundsätzliche betrachtung von objekten allerdings untergeordnet ist, behaupte ich schlicht, dass man auch ein interface als objekt bezeichnen darf. denn hier handelt es sich um eine spezialität von java, nicht von objektorientiertheit.


----------



## Murray (31. Mai 2007)

Gast hat gesagt.:
			
		

> 'type' ist der oberbegriff für datentypen. eine klasse oder interface ist kein typ, sondern die referenz auf eine instanz einer klasse ist ein 'type'.
> 
> (...)
> 
> der oberbegriff für class und interface ist schlicht "objekt". denn im grunde sind class und interface identisch. interface ist lediglich ein sondertyp von class, bei dem alle methoden abstract sind.



Üblicherweise würde man in Java doch wohl die Referenz auf eine Instanz einer Klasse Objekt nennen; Objekte sind eben Instanzen, während Klassen und Interfaces doch - unabhängig von einer konkreten Instanz bzw. einer Referenz darauf - Strukturen beschreiben. Dass man in Java Klassen und Interfaces wiederum als Objekte behandeln kann, ist eher ein Sonderfall.


----------



## Yzebär (31. Mai 2007)

Gast hat gesagt.:
			
		

> Begriff für class und interface ist schlicht "objekt". denn im grunde sind class und interface identisch. interface ist lediglich ein sondertyp von class, bei dem alle methoden abstract sind.



Ein Interface ist genau das, was der Name schon sagt, nämlich eine Schnittstelle und beinhaltet nichts weiter als Methodenspezifikationen. Eine Klasse, die dieses Interface implementiert, garantiert, daß sie diese Methoden hat und man diese gefahrlos aufrufen kann. Dazu braucht man das eigentliche Objekt (den Typ) überhaupt nicht zu kennen, sondern nur zu wissen, ob es die Schnittstelle implementiert oder nicht.

Eine Klasse dagegen ist ein konkreter Bauplan für Objekte (den static-Kram außen vor gelassen).

Von daher würde ich mich schwer tun, für diese beiden unterschiedlichen Dinge einen gemeinsamen Oberbegriff zu finden.


----------



## André Uhres (31. Mai 2007)

Yzebär hat gesagt.:
			
		

> ..Dazu braucht man.. (den Typ) überhaupt nicht zu kennen..


Eine Klasse, die eine Schnittstelle implementiert, ist vom Typ der Schnittstelle. Diesen Typ muss man natürlich kennen.


----------



## Evolver (31. Mai 2007)

> während Klassen und Interfaces doch - unabhängig von einer konkreten Instanz bzw. einer Referenz darauf - Strukturen beschreiben


Das würde sich mit meiner Ansicht etwa decken. Deswegen auch der Gedanke "MyStructure".


----------



## André Uhres (31. Mai 2007)

"Struktur" ist hier imho zu allgemein als Oberbegriff. 
Man könnte z.B. auch eine Struktur in einer Methode beschreiben (durch die Folge der Schleifen und Selektionen).


----------



## Rock Lobster (31. Mai 2007)

Wie wärs mit Typdefinition? Letztendlich werden ja Datentypen definiert... bzw. wozu brauchst Du überhaupt einen Oberbegriff?

Ansonsten ist es wie gesagt korrekt, einfach beides als Klasse zu bezeichnen, nur daß ein Interface halt eine gänzlich abstrakte Klasse darstellt.

Oder Du nennst es Objekt-Spezifikation, Blueprint, Bauplan, etc...


----------



## Yzebär (1. Jun 2007)

André Uhres hat gesagt.:
			
		

> Yzebär hat gesagt.:
> 
> 
> 
> ...



Mit etwas gutem Willen könnte man mir unterstellen, daß ich mit Typ die Klasse gemeint habe, die das Interface implementiert, aber du wirst es wahrscheinlich besser wissen...

Für mich ist eine Schnittstelle im Übrigen kein Typ, sondern nur eine Beschreibung oder Signatur zu einem Typen (im Sinne von: dieser Typ hat auf jeden Fall diese und jene Methoden). Wäre eine Schnittstelle ein Typ, könnte ich ja von ihr ableiten.


----------



## André Uhres (1. Jun 2007)

Yzebär hat gesagt.:
			
		

> ..Wäre eine Schnittstelle ein Typ, könnte ich ja von ihr ableiten.


Kannste auch


----------



## Yzebär (1. Jun 2007)

André Uhres hat gesagt.:
			
		

> Yzebär hat gesagt.:
> 
> 
> 
> ...



Interfaces können ein Interface erweitern... eine Klasse nicht und das mit gutem Grund.


----------



## André Uhres (1. Jun 2007)

Yzebär hat gesagt.:
			
		

> ..Interfaces können ein Interface erweitern..


Siehste  

Den Oberbegriff "Typ" oder "Datentyp" wird oft noch eingeteilt in "elementarer Typ" und "Referenztyp".
Elementare Typen sind: boolean, int, short, float, ...
Klassen und Schnittstellen sind *Referenztypen*.


----------

