tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
264
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Billie
    Billie Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    510
    Hellas!

    Also, gegeben ist eine Klasse A mit einer protected methode a(). Des weiteren eine Klasse B die von A ableitet und eine Methode b(A a) besitzt.

    Warum darf die Methode b nicht auf die Methode a() der Instanz a zugreifen?!

    Ich möchte eigentlich erreichen, dass nur abgeleitete Klassen von A auf die methode a() zugreifen können. Allerdings abgeleitete Klassen auch auf Instanzen von A.

    In einem klassischem equals darf die Klasse ja auch direkt auf das Attribut einer anderen Klasse zugreifen, Bsp:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    class A {
     
        private long attr = 0L;
     
     
        public boolean equals(Object obj) {
            A a = (A) obj;
            return attr == a.attr;
        }
     
    }

    Klar, es handelt sich um ein und dieselbe Klasse - trotzdem dachte ich protected ist hier etwas lockerer.
     
    Fann Ég Fjalli Fallega Steina
    Faldi Dá Alla Vildi Deim Leyna
    Huldi Dar Hellisskúta Heillasteina
    Alla Mína Una eth slegu Óskasteina

  2. #2
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Das kann nicht sein! ein bisschen Code mehr bitte!
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  3. #3
    Avatar von Billie
    Billie Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    510
    Doch, jetzt habe ich das Problem gefunden. Die Methode b(A a) der Unterklasse B darf auf die Methode a() der Instanz a zugreifen, sofern die Klasse B im selben Package wie A liegt.

    Ist bei mir aber leider nicht der Fall
     
    Fann Ég Fjalli Fallega Steina
    Faldi Dá Alla Vildi Deim Leyna
    Huldi Dar Hellisskúta Heillasteina
    Alla Mína Una eth slegu Óskasteina

  4. #4
    Xeonkryptos Xeonkryptos ist offline Mitglied
    Registriert seit
    Jun 2011
    Beiträge
    12
    Wenn du jetzt mit "ableiten" erben meinst, dann müsstest du die Methode überschreiben und mit einem super-Aufruf arbeiten, damit die Methode in der abgeleiteten Klasse ohne weitere Probleme verwendet werden kann. Nebenher kannst du dann auch den Modifier etwas lockern und auf public setzen, ist aber nicht notwendig.

    Soweit ich das verstanden habe
     

  5. #5
    Avatar von Billie
    Billie Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    510
    Hellas!

    Wenn ich in der Klasse B die Methode a überschreibe bringt mir das eigentlich nichts.

    Als hier doch ein Beispiel-Code:


    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    
    package a;
     
    public class A {
     
        protected void a() {
            System.out.println("A:a()");
        }
    }

    Klasse B lässt sich nicht kompilieren:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    package b;
     
    import a.A;
     
    public class B
        extends A {
     
        public void b(A a) {
            System.out.println("B:b(A)");
            a.a(); // The method a() from the type A is not visible
        }
    }
     
    Fann Ég Fjalli Fallega Steina
    Faldi Dá Alla Vildi Deim Leyna
    Huldi Dar Hellisskúta Heillasteina
    Alla Mína Una eth slegu Óskasteina

  6. #6
    Xeonkryptos Xeonkryptos ist offline Mitglied
    Registriert seit
    Jun 2011
    Beiträge
    12
    Ich hab das auch jetzt anderst gemeint. Du hast es nicht so umgesetzt, wie ich das meinte. Ich meinte das so:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    
    package a;
     
    public class A {
     
        protected void a() {
            System.out.println("A:a()");
        }
    }

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    package b;
     
    import a.A;
     
    public class B extends A {
        
        public void b() {
            System.out.println("B:b(A)");
            a();
        }
        
        @Override
        public void a() {
            super.a();
        }
     
    }

    und meine Testklasse:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    package test;
     
    import b.B;
     
    public class Test {
     
        static B b = new B();
        
        public static void main(String[] args) {
            b.b();
        }
    }

    So funktioniert es, denn durch die Vererbung ist die Methode bekannt und kann überschrieben werden, damit sie in der Klasse sichtbar ist. Mit dem Codeschnipsel
    Code java:
    1
    
    super.a()
    rufst du die Methode aus der Hauptklasse auf und verwendet neben möglichen eigenen Code der Klasse B den Inhalt der Klasse A.
    Das habe ich damit gemeint.
     

Ähnliche Themen

  1. C++ && protected
    Von Enumerator im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 16.02.10, 11:09
  2. PC CAMERA von Protected Treiber are missing
    Von NetteMann im Forum Hardware
    Antworten: 1
    Letzter Beitrag: 14.06.08, 21:45
  3. Was ist das Beste um in den Protected-Mode zu schalten
    Von billgatesm im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 30.07.05, 18:53
  4. protected mode einschalten
    Von Tanor im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 17.02.05, 12:59
  5. protected
    Von Cstar im Forum Java
    Antworten: 5
    Letzter Beitrag: 30.06.04, 10:30