public abstract void sprich(String text);
nur am rande: abstrakte Klassen sollten nur existieren, wenn man einen template implementierung eines Interfaces braucht, nicht zur Verhinderung von instanziierung.Da es aber in diesem Sinne keine Menschen sondern eben nur Männer und Frauen gibt, deklarieren wir die Klasse Mensch abstrakt
genau, deswegen ja meine Aussage bzgl der Template implementierung. Ich sagte, dass der einzige Grund einer abstrakten Klasse ist, dass sie als template eines Interfaces existiert. D.h. dass man dort Implementierungen drinnen hat, die allgemein gueltig sind und nicht von jeder Implementierung des interfaces erneut geschrieben werden soll.... oder wenn sie abstrakte und konkrete Methoden beinhalten - ein Interface lässt ja nicht zu, dass man Methoden bereits implementiert.
interfaces sind auch nix anderes als spezielle abstrakte Klassen.Ausserdem ist meine Sicht die von UML und Java-Interfaces werden dort IMO als abstrakte Klassen dargestellt.
... als template eines Interfaces ...
die reine Existenz einer Sache ist nicht gleichzusetzen mit seiner Berechtigung. Am Bsp von Swing sieht man was man fuer Probleme man hat wenn man keine Interfaces nutzt und einfach nur abstrakte Klassen. Und da man nicht einfach etwas nachmachen soll, nur weil es schon gibt, sollte man nur abstrakte Klassen einsetzen, wenn man eben eine Template Klasse eines Interfaces braucht.Was meinst du damit? Es gibt hunderte von abstrakten Klassen zu denen KEIN Interface existiert.
Interfaces haben an sich nichts mit Mehrfachvererbung zu tun und warum das immer gesagt wird hat sich mir noch nie erschlossen. Nur weil versch. Klassen das selbe Interface implementieren sind sie nicht in einer Vererbungshierarchie.Ein Interface im Java Sinn ist ja nur ein Mechanimus um die Mehrfachvererbung auf eine sinvolle Art zu ermöglichen.
public interface Named {
public String getName();
}
public static void printName(Named n) {
System.out.println(n.getName());
}
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:
[Java]getClass().getName() + '@' + Integer.toHexString(hashCode())[/code]
wie definierst du Mehrfachvererbung/ Vererbungshierarchie?Interfaces haben an sich nichts mit Mehrfachvererbung zu tun und warum das immer gesagt wird hat sich mir noch nie erschlossen. Nur weil versch. Klassen das selbe Interface implementieren sind sie nicht in einer Vererbungshierarchie.
hmm.. kannst du kein konkretes Beispiel machen bei dem man sieht wo diese Methode getName definiert wird?
und was ist der Sinn der Sache?
man kann doch die Methode "getName" gleich in der Klasse "Auto" definieren, anstatt ein Interface zu generieren und dann die Methode zu überschreiben..
könntest du dafür ein Beispiel machen?Dann kann ich aber nirgens in gemeinsamen Code alle Namen aller Autos und alle Namen aller Menschen ausgeben
public Car extends Named {
private String name;
public Car(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public Human extends Named {
private String nickName;
public Car(String nickName) {
this.nickName= nickName;
}
public String getName() {
return nickName;
}
}
List<Car> cars = new ArrayList<Car>();
cars.add(new Car("Audi"));
cars.add(new Car("BMW"));
// ...
List<Human> humans = new ArrayList<Human>();
humans.add(new Human("faetzminator"));
humans.add(new Human("just"));
// ...
for (Car c : cars) { // durch alle Cars iterieren
printName(c);
}
for (Human h : humans) { // das gleiche mit den Menschen
printName(h);
}
public static void printName(Named n) {
System.out.println(n.getName());
}
public static void printName(Car c) {
System.out.println(c.getName());
}
public static void printName(Human h) {
System.out.println(h.getName());
}
public class InterfaceExample {
public static void main(String[] args) {
Person p1 = new Person("Hans");
Person p2 = new Person("Peter");
Car c = new Car("Audi");
printName(p1);
printName(p2);
printName(c);
}
public static void printName(Person p) {
System.out.println(p.getName());
}
public static void printName(Car c) {
System.out.println(c.getName());
}
private static class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
private static class Car {
private String name;
public Car(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
}
public class InterfaceExample {
public static void main(String[] args) {
Person p1 = new Person("Hans");
Person p2 = new Person("Peter");
Car c = new Car("Audi");
printName(p1);
printName(p2);
printName(c);
}
public static void printName(Named n) {
System.out.println(n.getName());
}
private static class Person implements Named {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
private static class Car implements Named {
private String name;
public Car(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
private static interface Named {
public String getName();
}
}
weil String und Integer Comparable sind, stehen die beiden nicht im direkten Zusammenhang und somit nicht in einer Vererbungshierarchie. Number und Integer hingegen schon.wie definierst du Mehrfachvererbung/ Vererbungshierarchie?
durch die Java-Einschränkungen gibt es da eine gewisse Eingrenzung, als Polymorphie allgemein betrachtet stehen die implementierenden Klassen ja nun doch in irgendeiner Hierarchie zusammen, das ist ja gerade das Ziel
ich glaube eher er meint, ob es in JAva schon ein solches Interface gibt, so dass er bei "Figuren" Interfaces nicht nochmal all diese Methoden definieren muss, sondern einfach ueber [c]interface Figur extends JavaInterfaceFigur[/c] das ganze regelt.wenn du das ganze mit interfaces machen willst dann musst du in jeder klasse die dies implementieren soll die entsprechende methode aus-implemenieren ...
das was du sicher meinst ist von basis-klassen der SE-api ableiten und dann deren methoden verwenden ...
das nennt sich dann vererbung und hat so nichts mit interfaces zu tun ..
auch dazu findest du in der java-insel genug material
public abstract class GeometrischeFigur
{
int x;
public int getX()
{
return x;
}
// Berechnung ist bei (fast) jeder Figur anders
public abstract int getUmfang();
}
Ich denke, er meint eine Abstrakte Klasse in welcher die Methoden (getX..), die in allen geom. Fig. gleich sind, implementiert sind und die speziellen abstract.
Java:public abstract class GeometrischeFigur { int x; public int getX() { return x; } // Berechnung ist bei (fast) jeder Figur anders public abstract int getUmfang(); }
Edit: besseres Beispiel: Berechnung der Fläche.
da Interfaces nix anderes als (besondere) abstrakte Klassen sind, gilt das natuerlich auch bei abstrakten Klassen....Der Vorteil beim Verwenden des Interfaces ist es aber, dass du die Implementierung austauschen kannst ohne den Rest vom Code (welcher sich nur auf das Interface bezieht) verändern zu müssen.