Klasa prywatna w Java?

0

W "polskim internecie" jakoś google na wpisanie "klasa prywatna java" nie daje mi wyników, które by mi cokolwiek wyjaśniły. Dlatego pytam tutaj. Jak to jest z klasami prywatnymi w Javie? Do czego i jak je uzywać?

0

Np. jak użyć (jakiś dowolny przykład) klasy prywatnej + watki. Bo mi nic nie (wychodzi) przychodzi do głowy. Może bycnawet jakieś najprostsze wyswietlanie napisu. To mi nic nie wypisuje a (chyba?) powinno:

class InnaKlasa extends Thread{ 

    private class Watek{
        public void wypisz(){
            System.out.println("Hello world!");
        }
    
    public Watek w = new Watek();     
        
    public void run(){
        w.wypisz();
    }
    }
}

public class Zad {
    public static void main(String[] args) {
        InnaKlasa w1 = new InnaKlasa();
        w1.start();
    }
}
1

Proste jak drut, klasy prywatne nie są widziane poza danym modułem, fin.

0

To w takim razie jako to ugryźć? Samo:

private class a extends Thread{}

wywala błąd, że private jest tu niedozwolone.

0

Źle klamerki postawiłeś. Działający kod:

class InnaKlasa extends Thread{ 
 
    private class Watek{
        public void wypisz(){
            System.out.println("Hello world!");
        }
    }
    public Watek w = new Watek();     
 
    
    @Override
    public void run(){
        w.wypisz();
    }
    
}

public class Main {
    public static void main(String[] args) {
        InnaKlasa w1 = new InnaKlasa();
        w1.start();
        try
        {
            w1.join();
        } catch(Exception e)
        {            
        }
    }
}
0

Dziękuję:) W międzyczasie znalazłem taki oto kod:

class Tester {

    private class Watek extends Thread {
        public void run(){
            System.out.println("Hello world!");
        }
    }

    public void funkcja(){
        Watek w = new Watek();
        w.start();
    }
}

Czy są one równoznaczne?

0

@winerfresh: to jaki jest zakres widoczności klasy prywatnej, o ile tak to można nazwać? Poza nią mogę tworzyć jej obiekty, i mam do nich dostęp - więc nie bardzo rozumiem tę prywatność.

0

@Michał: A spróbuj stworzyć nową klasę, np. MojaInnaKlasa i z niej odwołać się do klasy Tester.Watek :> Jako, że Ci się nie uda tego dokonać, to stwierdzam: to jest właśnie prywatność ;p

0

Można jednak mieć dostęp do metod obiektu klasy prywatnej i to jest często spotykana strategia. To znaczy, nasz klasa prywatna implementuje publiczne interfejsy albo dziedziczy po nieprywatnych klasach bazowych, a my zwracamy obiekt naszej klasy prywatnej zrzutowany na jakiś interfejs lub nieprywatną klasę bazową.

interface Interfejs {

    void metoda1();
}

abstract class KlasaBazowa {

    abstract void metoda2();
}

public class Main {

    private class Klasa extends KlasaBazowa implements Interfejs {

        public void metoda1() {
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        void metoda2() {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    }
    
    Interfejs zwróćNasząSuperTajnąImplementację() {
        return new Klasa();
    }

    public static void main(String[] args) {
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1