Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich lese mir gerade hier einige Artikel durch und bin bei einem Modefizierer angelangt, den ich nicht richtig einschätzen kann, was er macht & wozu man ihn benötigt.
Und zwar: native
Beispiel:
Java:
public native double calcSomethingNative(double val1, double val2);
Der dazugehörige Wikipediaartikelabschnitt: "native kann nur vor Methoden stehen und bedeutet, dass die Implementierung der betreffenden Methode nicht in Java, sondern einer anderen Programmiersprache geschrieben wurde, und von der virtuellen Maschine über eine Laufzeitbibliothek [.dll in Windows] eingebunden werden muss."
Also Dinge, die nicht in Bytecode vorliegen, sondern in nativem Code. Bsbw. Festplattenzugriffe mittels eines InputStreams laufen alle über native Methoden.
Der dazugehörige Wikipediaartikelabschnitt: "native kann nur vor Methoden stehen und bedeutet, dass die Implementierung der betreffenden Methode nicht in Java, sondern einer anderen Programmiersprache geschrieben wurde, und von der virtuellen Maschine über eine Laufzeitbibliothek [.dll in Windows] eingebunden werden muss."
Also Dinge, die nicht in Bytecode vorliegen, sondern in nativem Code. Bsbw. Festplattenzugriffe mittels eines InputStreams laufen alle über native Methoden.
Solche Methoden werden in Interfaces definiert. Ein Interface ist ähnlich einer Klasse man kann aber nur Methoden definieren die nichts machen. Das hat den Sinn um dem Programmierer vorzugeben welche Methoden implementiert werden müssen. Ob diese dann im normalen Code eine Verwendung haben ist irrelevant. Ein gutes Beispiel sind die Listener. Wenn du einen MouseListener implemenierst musst du auch fixe Methoden implementieren wie zB. mouseClicked() etc.
Solche Methoden werden in Interfaces definiert. Ein Interface ist ähnlich einer Klasse man kann aber nur Methoden definieren die nichts machen. Das hat den Sinn um dem Programmierer vorzugeben welche Methoden implementiert werden müssen. Ob diese dann im normalen Code eine Verwendung haben ist irrelevant. Ein gutes Beispiel sind die Listener. Wenn du einen MouseListener implemenierst musst du auch fixe Methoden implementieren wie zB. mouseClicked() etc.
abstrakte Methoden werden schon in Interfaces definiert , allerdings ist dort das Keyword
Code:
abstract
nicht notwendig , da ein Interface ausschließlich abstrakte Methoden ohne Rumpf, also Implementierung enthalten kann !
demnach kann ich in einem Interface die Methoden ohne Angabe des Schlüsselwortes
Code:
abstract
definieren.
Ganz anders sieht das ganze in Abstrakten Klassen aus, diese sind sobald sie eine Abstrakte Methode enthalten ebenfalls als abstrakt zu deklarieren, allerdings kann die Klasse trotzdem Methoden mit sozusagen (Grund)-Implementierungen enthalten!
Damit will ich zum Ausdruck bringen das das hier :
Java:
public abstract void doSomethingCool();
eher aus einer Abstrakten Basisklasse stammt und nicht aus einem Interface.
Hier nochmal ein Beispiel dazu :
Java:
public interface MyInterface {
public void doSomething();
}
und hier eine abstrakte Basisklasse :
Java:
public abstract class AbstactClass {
public abstract void doSomething();
public void doSomething(String input){
//Hook
}
}
möchte ich eine abstrakte Methode deklarieren muss ich das Schlüsselwort angeben, oder ich lasse das Schlüsselwort weg und deklariere einen leeren Methodenrumpf dazu , dies nennt man Hook.
im Ersten Fall zwinge ich abgeleitete Klassen dazu die Methode zu überschrieben, bei letzterem biete ich lediglich die Möglichkeit einer Spezialisierten Implementierung an .
Man kann schon über die Angabe der Klassendeklaration erkennen ob es sich um eine Spezialisierung einer Basisklasse handelt , oder ob ein Interface implementiert wird, oder vielleicht sogar beides,
Subklasse:
Java:
public class MyClass extends SomeOtherClass{...}
Implementierung eines Interfaces:
Java:
public class MyClass implements MyInterface{...}
Subklasse und implementierung mehrerer Interfaces:
Java:
public class MyClass extends SomeOtherClass implements MyInterface, AnotherInterface{...}
Zu der Nutzung von Schnittstellen hat man sich in Java entschieden da die Sprache keine Mehrfachvererbung zulässt, um Situationen die zu einem DDoD (Deadly Diamond of Death) führen könnten, zu vermeiden.
Deshalb ist es aber möglich mehrere Interfaces zu Implementieren, die wiederrum mehrere unterschiedliche Funktionen haben können.
[EDIT]Falls du Probleme haben solltest mit der Definition und oder deren Nutzung von Interface und abstrakter Superklassen frag ruhig [/EDIT]
<Klugs******-Mode ON>
@kaoZ
Und auch das ist nicht ganz korrekt.
Seit Java-8 KANN in einem Interface eine Methode implementiert werden, indem diese als default markiert wird. Beispielsweise findet man in der Klasse Collection die Methode
Java:
default boolean removeIf(Predicate<? super E> filter)
<Klugs******-Mode OFF>
Aber, natürlich, waren deine Ausführungen (in der Vor-Java-8-Zeit), exakt.
Danke für das hinzufügen einer weiteren Möglichkeit
Seit Java 8 ist ja auch das nutzen funktionaler Interfaces in Verbindung mit Lamda Expressions möglich, so weit wollte ich aber dann doch nicht ausschweifen.
Zudem ist es ja nun seit Java 8 parallel zu den default Methoden auch möglich statische Methoden in Interfaces zu implementieren, nur um wirklich alle Neuerungen mit aufzuzählen.
[EDIT]
wichtig war mir eigentlich nur das dem TO nicht der Eindruck vermittelt wird es gäbe nur die Möglichkeiten sowas über Interfaces zu realisieren, sonder eben auch durch das nutzen abstrakter Klassen, mal abgesehen davon das es mit dem eigentlichen Thema so garnichts mehr zu tun hat ^^.
[/EDIT]