class ich kann keinen objekt machen



  • ja, aber ich hab ja mit raetsler r = new raetsler(); ein objekt das doch Rate sehen sollte.
    wie sollte es denn aussehen das es geht???



  • Muss die Klasse "Rate" denn innerhalb von "raetsler" sein? Wenn Nein dann löst sich für dich das Problem durch voranstellen von "public" an die Klassendefinition für "Rate"



  • hi.
    ja, Rate soll in raetsler sein.
    also etwa so:

    [java]
    public class raetsler{

    class Rate(){
    public Rate(){ //konstruktor
    }

    void func(){ //irgendeine methode die in Rate ist.
    }

    } //Rate schliessen

    static public void main(String args[]){
    Konstruktor von Rate aufrufen, also objekt von Rate machen;
    } //main schliessen

    }// public raetsler schliessen.
    [/code]

    und das ganze ohne das Rate static ist...
    bitte bsp und wenns geht mit erklärung...

    ahja und sorry wegen der grammatik im titel 😃

    bye donay



  • public class Test {
        private class Rate {
            private int i;
    
            public int getI() {
                return i;
            }
    
            public void setI(int v) {
                i = v;
            }
    
        }
    
        public static void main(String[] args) {
            Test t = new Test();
            Test.Rate r = t.new Rate(); 
            System.out.println(r.getI());
        }
    }
    

    Das funktioniert bei mir einwandfrei .....

    Ich hoffe, es hilft



  • Ja, das funktioniert schon, denn du befindest dich ja in der Klasse Test, sonst gehts aber nicht, also machts auch keinen Sinn.



  • Es gibt eine Regel die man beachten sollte.

    Objekte von inneren Klassen ausschließlich in der äußeren Klasse instantiieren, die diese innere Klasse auch beherbergt.

    Sobald man eine innere Klasse plötzlich wo anders auch braucht ist das entweder ein Designfehler oder ein Kandidat für eine "öffentliche" (d.h. äußere, eigenständige) Klasse.

    @donay: Es ist schon eine Sünde einen Package-Namen so zu nennen wie eine Klasse des Packages. Trägt dem Sinn vom Packaging nicht gerade weiter :-)Deklarier deine Rate Klasse auf der selben Ebene - so müsste es tun.



  • public class Test {
        public static void main(String[] args) {
            Test1 t = new Test1();
            Test1.Rate r = t.new Rate(); 
            System.out.println(r.getI());
        }
    }
    
    public class Test1 {
        public class Rate {
            private int i;
    
            public int getI() {
                return i;
            }
    
            public void setI(int v) {
                i = v;
            }
    
        }
    }
    

    Es geht be imir genauso ....... nur halt mit ner public inner class.

    ..... auch wenn's vom design her schwachsinn ist, so funktioniert es trotzdem



  • danke, aber wieso t.new? ich versteh hier den aublauf nicht...
    bye donay



  • Die beiden folgenden Links erklären es kurz(Leider in Englisch):

    [url] http://c2.com/cgi/wiki?InnerClasses [/url]
    [url] http://www.newarchitectmag.com/archives/1997/11/java/ [/url]

    Innere Klassen besitzen immer implizit eine referenz zur äußeren Klasse. Deshlab müssen sie qualifiziert aufgerufen werden.



  • hi.
    ok, hab mich dort ein bisschen umgeshen, leider aber nicht alles verstanden, darum komm ich immer noch nicht nach wieso denn t.new und nicht zum beipiel:
    Test t = new Test();
    Test.test = new t.test();

    ich kann mir unter t.new nichts vorstellen irgendwie...

    bye donay


Anmelden zum Antworten