Avatar billede jens426 Nybegynder
11. november 2007 - 19:08 Der er 11 kommentarer og
1 løsning

protected/public

Hvad er forskellen på at sættes en metode til public og protected.

hvad jeg har fundet frem til ved at se i bøger og på nettet.

protected er mere restricted end public.

protected betyder at klassen selv og alle klasser der arver fra denne klasse har adgang til denne metode.

public betyder alle har adgang til denne metode.

er der ikke en der kunne lave et simpel eksempel hvor forskellen kan ses.

f.eks. hvis man har følgende klasse

public class forskel {

       
    protected void test1() {
    System.out.println("protected");
    }
   
    public void test2() {
    System.out.println("public");
    }


}
Avatar billede nielle Nybegynder
11. november 2007 - 19:35 #1
Et par eksempler:

class ClassA {
    private int FunktionA() {
        return 1;
    }

    protected int FunktionB() {
        return 2;
    }

    public int FunktionC() {
        return 3;
    }

    public void DemoA() {
        int A = FunktionA();  // Lovligt.
        int B = FunktionB();  // Lovligt.
        int C = FunktionC();  // Lovligt.
    }
}

class ClassB extends ClassA {
    public void DemoB() {
        int A = FunktionA();  // Ikke lovligt - FunktionA() er private i ClassA.
        int B = FunktionB();  // Lovligt.
        int C = FunktionC();  // Lovligt.
    }
}

class ClassC {
    public void DemoC() {
        ClassA classA = new ClassA();
        int A = classA.FunktionA();  // Ikke lovligt - FunktionA() er private i ClassA.
        int B = classA.FunktionB();  // Ikke lovligt - FunktionB() er protected i ClassA og ClassC arver ikke fra ClassA.
        int C = classA.FunktionC();  // Lovligt.

        ClassB classB = new ClassB();
        A = classB.FunktionA();  // Ikke lovligt - FunktionA() er private i ClassA.
        B = classB.FunktionB();  // Ikke lovligt - FunktionB() er protected i ClassA og ClassC arver ikke fra ClassA.
        C = classB.FunktionC();  // Lovligt.
    }
}
Avatar billede jens426 Nybegynder
11. november 2007 - 20:00 #2
problemmet er at følgende ikke giver compile fejl

class ClassA {
    private int FunktionA() {
        return 1;
    }

    protected int FunktionB() {
        return 2;
    }

    public int FunktionC() {
        return 3;
    }

    public void DemoA() {
        int A = FunktionA();  // Lovligt.
        int B = FunktionB();  // Lovligt.
        int C = FunktionC();  // Lovligt.
    }
}

class ClassB extends ClassA {
    public void DemoB() {
        int B = FunktionB();  // Lovligt.
        int C = FunktionC();  // Lovligt.
    }
}

class ClassC {
    public void DemoC() {
        ClassA classA = new ClassA();
        int B = classA.FunktionB();  // Ikke lovligt - FunktionB() er protected i ClassA og ClassC arver ikke fra ClassA.
        int C = classA.FunktionC();  // Lovligt.

        ClassB classB = new ClassB();

        B = classB.FunktionB();  // Ikke lovligt - FunktionB() er protected i ClassA og ClassC arver ikke fra ClassA.
        C = classB.FunktionC();  // Lovligt.
    }
}
Avatar billede erikjacobsen Ekspert
11. november 2007 - 20:05 #3
Klasse i samme fil kender altid hinanden.
Avatar billede erikjacobsen Ekspert
11. november 2007 - 20:06 #4
KlasseR i samme fil kender altid hinanden.
Avatar billede jens426 Nybegynder
11. november 2007 - 20:11 #5
jeg har 3 filer.

ClassA.java
class ClassA {
    private int FunktionA() {
        return 1;
    }

    protected int FunktionB() {
        return 2;
    }

    public int FunktionC() {
        return 3;
    }

    public void DemoA() {
        int A = FunktionA();  // Lovligt.
        int B = FunktionB();  // Lovligt.
        int C = FunktionC();  // Lovligt.
    }
}

ClassB.java
class ClassB extends ClassA {
    public void DemoB() {
        int B = FunktionB();  // Lovligt.
        int C = FunktionC();  // Lovligt.
    }
}

ClassC.java

class ClassC {
    public void DemoC() {
        ClassA classA = new ClassA();
        int B = classA.FunktionB();  // Ikke lovligt - FunktionB() er protected i ClassA og ClassC arver ikke fra ClassA.
        int C = classA.FunktionC();  // Lovligt.

        ClassB classB = new ClassB();

        B = classB.FunktionB();  // Ikke lovligt - FunktionB() er protected i ClassA og ClassC arver ikke fra ClassA.
        C = classB.FunktionC();  // Lovligt.
    }
}
Avatar billede _carsten Nybegynder
11. november 2007 - 20:22 #6
En private metode: Har class scope dvs. er kun tilgængelig i selve klassen

En protected metode: Har class, package og subclass scope

Class scope: Er tilgængelig fra klassen
Package scope: Er tilgængelig hvis 2 klasser ligger i samme package/mappe
Subclass scope: Er fra nedarvede klasser selvom de ikke ligger i samme package/mappe



nielle's eksempel skal se sådan ud


public class NewMain {
    public static void main(String[] args) {
        new ClassC().DemoC();
    }
}

class ClassA {
    private int FunktionA() {
        return 1;
    }

    protected int FunktionB() {
        return 2;
    }

    public int FunktionC() {
        return 3;
    }

    public void DemoA() {
        int A = FunktionA();  // Lovligt.
        int B = FunktionB();  // Lovligt.
        int C = FunktionC();  // Lovligt.
    }
}

class ClassB extends ClassA {
    public void DemoB() {
        //int A = FunktionA();  // Ikke lovligt - FunktionA() er private i ClassA.
        int B = FunktionB();  // Lovligt.
        int C = FunktionC();  // Lovligt.
    }
}

class ClassC {
    public void DemoC() {
        ClassA classA = new ClassA();
        //int A = classA.FunktionA();  Ikke lovligt - FunktionA() er private i ClassA.
        System.out.println("" + classA.FunktionB());  // LOVLIGT FORDI ClassA LIGGER I SAMME PACKAGE SOM ClassC
        System.out.println("" + classA.FunktionC());  // Lovligt.

        ClassB classB = new ClassB();

        //A = classB.FunktionA();  Ikke lovligt - FunktionA() er private i ClassA.
        System.out.println("" + classA.FunktionB());  // LOVLIGT FORDI ClassA LIGGER I SAMME PACKAGE SOM ClassC
        System.out.println("" + classA.FunktionC());  // Lovligt.
    }
}
Avatar billede _carsten Nybegynder
11. november 2007 - 20:24 #7
tyrkfejl er gratis
Subclass scope: Er fra nedarvede klasser selvom de ikke ligger i samme package/mappe

Rettes til
Subclass scope: Er fra tilgængelig fra nedarvede klasser selvom de ikke ligger i samme package/mappe
Avatar billede _carsten Nybegynder
11. november 2007 - 20:25 #8
Stadig gratis :)
Subclass scope: Er tilgængelig fra nedarvede klasser selvom de ikke ligger i samme package/mappe
Avatar billede _carsten Nybegynder
11. november 2007 - 20:31 #9
Avatar billede jens426 Nybegynder
11. november 2007 - 20:44 #10
okay

hvis der ønskes pont, skriv et svar
Avatar billede _carsten Nybegynder
11. november 2007 - 20:48 #11
Svar
Avatar billede nielle Nybegynder
11. november 2007 - 20:55 #12
Springer over på denne her. _carsten's link far spot-on. :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester