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.
Im Rahmen der Java-Zertifizierung beschäfitge ich mich gerade mit Inneren Klassen! Kann mir jemand einen sinnigen Anwendungsfall nennen? Wo bringen Innere Klassen tatsächlich Vorteile?
Zunächst mal klingt deine Aussage so, als würdest Du darin keine Vorteile sehen (evtl. sogar Nachteile).
IMHO bietet sich z.B. ein ActionListener an, in einer inneren Klasse implementiert zu werden.
Ansonsten gibt es in der API ein paar Beispiele; z.B. HTML und HTML.Tag
Mir fällt es ehrlich gesagt sehr schwer, Innere Klassen als sinnvoll zu erachten. Beispiele mit dem ActionListener kenne ich, ich dachte eher an irgendwelche selbsterstellte Beispiele! Das einzige was mir dazu einfällt ist folgendes
public class Pfirsich {
public class Kern{
}
}
Würde dies der Logik von inneren Klassen entsprechen?
Jop, obwohl innere Klassen meist anonym oder static sind.
[edit]
Hier mal ein Beispiel, dass mit einer anonymen und einer private statischen inner Class arbeitet
Code:
public class KomplexeDatenstruktur{
private static float eineConstante = 4.6f;
private static class Data{
/*
man kann sie auch sowohl öffentlich als auch als äußere Klasse machen,
aber wenn man die Klasse 'Data' gar nicht an andere Stelle braucht,
weil sie evtl. nur als Hilfklasse für diese 'KomplexeDatenstruktur' dient,
ist das eigentlich eine gute Lösung.
Es ist halt nur eine Schönheitsfrage und geht auch immer als äußere oder öffentliche innere Klasse.
Eine Klasse innerhalb einer anderen zu machen, kann auch den Vorteil haben,
dass sie die privaten Varibalen der um schließenden Klasse nutzen kann.
Eine Statische inner Class kann dabei die statischen Varibablen nutzen und eine nicht statische sogar
die Instanz Variblen (Beispiel zum Schluss)
*/
public void setFoo(int foo){
this.foo = foo * eineConstante;
}
public byte[] getBytes(){
return ...
}
}
...
// ganz viele gemeine Sachen
...
public InputStream asByteStream(){
return new InputStream(){ // halt die anonyme Klasse
private final Iterator<Data> i = datas.iterator();
private InputStream aktStream = null;
public int read() throws IOException {
if(aktStream == null){
if(!i.hasNext()) return -1;
aktStream = new ByteInputStream(i.next().getBytes());
}
int r = aktStream.read();
while(r == -1 && i.hasNext()){
aktStream = new ByteInputStream(i.next().getBytes());
r = aktStream.read();
}
return r;
}
};
}
}
Hab ich glaub ich erst einmal benutzt aber hier noch eins für eine nicht statiche öffentliche InnerClass
Code:
public class Fabrik{
public static void main(String[] args){
Fabrik f = new Fabrik();
f.setAktYear(2002);
Fabrik.Car c1 = f.new Car();
System.out.println(c1.getQualtität());
f.setAktYear(2006);
Fabrik.Car c2 = f.new Car();
System.out.println(c2.getQualtität());
}
private Foo w;
private int aktYear;
public void setFoo(Foo val){
w = val;
}
public void setAktYear(int y){
this.aktYear = y;
}
public class Car{
private final int baujahr;
public Car(){
this.baujar = aktYear;
}
public float getQualtität(){
return foo * Math.PI * baujahr / 0815;
}
}
}
Cool ist halt die starke Bindung der Klasse Car an die Fabrik Instanz , mit der man auch die privtaten Instanzvaribalen(siehe foo oder aktYear) nutzen kann.
so, hab keine Lust mehr, aber vieleicht hats etwas geholfen.
Für öffentlich statische Klassen sind
Point2D
Point2D.Double
Point2D.Float
noch ein gutes Beispiel.