wewnętrzna klasa w Javie / do tej pory wiemy, że członkami klasy są zmienne, metody, konstruktory i bloki inicjalizujące.
ale możliwe jest również posiadanie klasy lub interfejsu jako członka klasy.
Klasa zadeklarowana wewnątrz innej klasy jest znana jako klasy zagnieżdżone w Javie. Zakres zagnieżdżonej klasy jest związany zakresem jej klasy zamykającej (Klasa zewnętrzna).
Tak więc, jeśli Klasa B jest zdefiniowana wewnątrz klasy A, to klasa B nie może istnieć niezależnie bez klasy A. Tutaj Klasa A jest klasą zewnętrzną lub zamykającą, A Klasa B jest klasą zagnieżdżoną.
zagnieżdżona klasa w Javie ma dostęp do członków ( w tym członków prywatnych) swojej klasy zamykającej. Ale Klasa zamykająca nie ma dostępu do członków zagnieżdżonej klasy.
klasa, która jest członkiem innej klasy, może być statyczna lub niestatyczna. Innymi słowy, istnieją dwa typy zagnieżdżonych klas w Javie: statyczne i niestatyczne.
Klasa członkowska zadeklarowana za pomocą modyfikatora statycznego jest znana jako statyczna Klasa zagnieżdżona w Javie.
Klasa członkowska, która jest niestatyczna, jest znana jako klasa wewnętrzna lub niestatyczna Klasa zagnieżdżona. Jest to najważniejszy Typ zagnieżdżonej klasy.
w tym samouczku nauczymy się tylko wewnętrznej klasy w Javie. Później omówimy statyczną klasę zagnieżdżoną w dalszej części samouczka.
Klasa wewnętrzna w Javie
Klasa wewnętrzna w Javie jest klasą zadeklarowaną wewnątrz innej klasy bez modyfikatora statycznego. Jest również powszechnie znana jako niestatyczna Klasa zagnieżdżona w Javie. Może uzyskać dostęp do wszystkich elementów (zmiennych i metod) swojej zewnętrznej klasy.
Klasa wewnętrzna nie może mieć żadnych elementów statycznych. Członkami klasy wewnętrznej java mogą być:
- zmienne instancji
- metody instancji
- konstruktory
- blok Inicjalizatora
- Klasa wewnętrzna
składnia klasy wewnętrznej
access modifier class OuterClassName { . . . . . . . . . . access modifier class InnerClassName { // Members of the inner class. } // Other members of the outer class.}For example:public class Test { // Here, Test is an outer class. . . . . . . // Inner class public class A { // A is inner class as a member of its outer class. . . . . } }
klasa, która posiada klasę wewnętrzną nazywa się klasą zamykającą lub zewnętrzną. Klasa zamykająca jest klasą najwyższego poziomu, podczas gdy Klasa wewnętrzna jest członkiem klasy zewnętrznej.
relacja między klasą zewnętrzną a klasą wewnętrzną reprezentuje związek Has-a. Relacja Has-a określa relację między dwiema klasami. W języku Java jest również znany jako skład lub agregacja.
kiedy Klasa wewnętrzna jest klasą zamykającą dla innej klasy wewnętrznej, nazywa się to zagnieżdżaniem klas wewnętrznych. Nie ma ograniczeń co do zagnieżdżania klas wewnętrznych.
w jakiej wersji została wprowadzona Klasa wewnętrzna w Javie?
Klasa wewnętrzna została wprowadzona w wersji Java 1.1 bez żadnych zmian w JVM używanym do obsługi plików klas. Jest on w pełni zaimplementowany przy pomocy kompilatora Javy.
kompilator Java generuje osobny plik klasy kropek dla każdej klasy wewnętrznej o nazwie Outer$Inner.klasy i dla klasy zewnętrznej o nazwie Outer.klasy. Na przykład wewnętrzna Klasa A jest kompilowana do klasy Test o nazwie Test$A.class.
jeśli jakaś nazwa pliku klasy kropki zawiera symbol ” $ ” w środku, to pokazuje wewnętrzny plik klasy. Format plików klas dla klas wewnętrznych jest taki sam jak plików klas dla klas zewnętrznych.
dlatego JVM traktuje pliki klas dla klas wewnętrznych i klas zewnętrznych tak samo.
cechy klasy wewnętrznej
istnieje kilka ważnych cech klasy wewnętrznej, które są następujące:
1. Klasa wewnętrzna może mieć taką samą nazwę jak Klasa zewnętrzna.
2. Zakres klasy wewnętrznej jest ograniczony zakresem jej klasy zewnętrznej.
3. Bez istnienia zewnętrznego obiektu klasy lub instancji, nie będzie szans na istnienie istniejącego wewnętrznego obiektu klasy.
4. Klasa wewnętrzna może bezpośrednio uzyskać dostęp do wszystkich zmiennych i metod klasy zewnętrznej, w tym prywatnych.
5. Ponieważ Klasa wewnętrzna jest regularnym członkiem klasy zewnętrznej, tak jak zadeklarowane zmienne i metody w klasie.
dlatego możemy zastosować wszystkie modyfikatory dostępu java, takie jak public, default, protected I private do klasy wewnętrznej podobnej do pozostałych członków klasy. Ale Klasa zewnętrzna lub normalna nie może być prywatna ani chroniona.
6. Jeśli nazwa zmiennej klasy wewnętrznej jest taka sama jak nazwa zmiennej klasy zewnętrznej, możemy uzyskać dostęp do zmiennej klasy zewnętrznej w ten sposób. Nazwa klasy zewnętrznej.to.VariableName; tutaj reprezentuje bieżący obiekt klasy zewnętrznej.
7. Klasa wewnętrzna Java jest ukryta przed inną klasą w jej klasie. W związku z tym zapewnia mechanizm bezpieczeństwa w programie aplikacji i zmniejsza czytelność (zrozumienie) programu.
8. Obiekt klasy wewnętrznej jest często tworzony w swojej klasie zewnętrznej i nie może być utworzony z innych klas.
9. Zarówno obiekty klasy zewnętrznej, jak i wewnętrznej są tworzone w oddzielnych lokalizacjach pamięci.
składnia do tworzenia obiektu klasy wewnętrznej w Javie
instancja klasy wewnętrznej dzieli relację z instancją klasy zewnętrznej. Ta relacja jest taka, że nie możemy stworzyć instancji klasy wewnętrznej bez posiadania instancji klasy zewnętrznej.
dlatego, aby utworzyć obiekt klasy wewnętrznej, musisz najpierw utworzyć obiekt klasy zewnętrznej, aby powiązać go z klasą wewnętrzną. Możemy utworzyć wiele obiektów klasy wewnętrznej dla tej samej instancji klasy zewnętrznej.
składnia tworzenia obiektu dla klasy wewnętrznej jest następująca:
Syntax: OuterClass.InnerClass innerObject = outerObject.new InnerClass();For example:// First create an object of Outer class Test. Test t = new Test();// Second create an object of inner class A. Test.A innerObj = t.new A();
zobaczmy, jak instancja klasy wewnętrznej dzieli relację z instancją klasy zewnętrznej z przykładami czasu rzeczywistego.
przykład klasy wewnętrznej
1. Załóżmy, że istnieje Uniwersytet. Uniwersytet zawiera kilka wydziałów, takich jak Elektronika, Informatyka, elektryczne, mechaniczne, itp.
Jeśli Uniwersytet jest zamknięty, wszystkie wydziały tej uczelni zostaną zamknięte automatycznie.
dlatego można powiedzieć, że wydziały są powiązane z uczelnią. tzn. ich funkcjonalności są związane z jego uczelnią. Tak więc bez istniejącego obiektu uniwersyteckiego nie ma szans na istnienie istniejących obiektów wydziałowych.
ponieważ Wydział jest zawsze częścią klasy uniwersyteckiej. Dlatego musimy zadeklarować klasę wydziałową wewnątrz klasy uniwersyteckiej.
class University { // University is outer class. . . . . . . . class Department { // Department is inner class. . . . . . . . . }}
Tak więc, bez istniejącego jednego typu obiektu, jeśli nie ma szans na istnienie innego typu obiektu, powinniśmy zaimplementować wewnętrzną klasę.
2. Załóżmy, że jest samochód. W samochodzie, istnieje kilka ważnych poszczególnych elementów, które są wymagane. Najważniejszym elementem samochodu jest silnik.
silnik musi być wymagany do wykonania samochodu. Ale bez istniejącego obiektu samochodu nie ma również szans na istnienie obiektu silnika.
ponieważ silnik jest zawsze ważną częścią samochodu. W związku z tym silnik klasy musi być zadeklarowany wewnątrz samochodu klasy.
class Car { . . . . . . . . . class Engine { . . . . . . . . . . }}
powyższe dwa przykłady czasu rzeczywistego są wyjaśnione, aby uzyskać podstawowe idee wewnętrznej klasy. Teraz weźmiemy następny przykład oparty na Java API.
3. Jak wiemy, w Javie istnieje koncepcja mapy w API kolekcji. Mapa to nic innego jak grupa par klucz-wartość. Każda para klucz-wartość nazywana jest jednym wpisem. Teraz bez istniejącego obiektu mapy, czy istnieje szansa na istnienie istniejącego obiektu wejściowego?
odpowiedź brzmi nie, ponieważ bez istniejącego obiektu mapy obiekt wejściowy nie może również istnieć. Dlatego wpis interfejsu jest zdefiniowany wewnątrz interfejsu mapy.
Interface Map { // Map is an outer interface. . . . . . . . . . Interface Entry { // Entry is an inner interface. . . . . . . . . . . } }
teraz z powyższego przykładu czasu rzeczywistego zrozumiałbyś, że kiedy należy używać klasy wewnętrznej w programowaniu Java.
użycie klasy wewnętrznej w Javie
istnieją następujące ważne zastosowania klasy wewnętrznej w Javie.
1. Klasa wewnętrzna jest cenną cechą, ponieważ pozwala nam grupować klasy i interfejsy w jednym miejscu, które logicznie należy do siebie.
2. Pomaga kontrolować widoczność jednego w drugim, dzięki czemu może być bardziej czytelny i łatwy do utrzymania.
3. Najlepsze wykorzystanie klasy wewnętrznej java jest wtedy, gdy jej funkcjonalność jest powiązana z klasą zewnętrzną. Oznacza to, że bez istniejącego obiektu klasy zewnętrznej nie ma szans na istnienie obiektu klasy wewnętrznej. Zrozum przykłady w czasie rzeczywistym.
4. . Wewnętrzna Klasa Java jest przydatna do zapewnienia bezpieczeństwa dla ważnego kodu. Na przykład, jeśli zadeklarujemy klasę wewnętrzną jako prywatną, nie będzie ona dostępna dla innych klas. Oznacza to, że obiekt klasy wewnętrznej nie może być utworzony w żadnej innej klasie.
zrozummy to za pomocą przykładowego programu czasu rzeczywistego.
Załóżmy, że tworzymy klasę BankAcct. Aby uzyskać dane konta bankowego, definiujemy zmienne instancji 'saldo’ i 'stopa’ odsetek w klasie.
metoda calInterest() oblicza kwotę odsetek i wyświetla kwotę salda. Spójrz na poniższy kod źródłowy.
class BankAcct { // Balance and Rate of interest. private double bal; private double rate; // Calculating interest and updated balance. void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance amount = " +bal); }}
jak zauważyłeś, nie ma bezpieczeństwa dla tego kodu, ponieważ nie używa żadnych modyfikatorów dostępu przed klasą BankAcct.
ponieważ jest to domyślne modyfikatory dostępu, każdy programista może łatwo utworzyć obiekt tej klasy i uzyskać dostęp do elementów klasy spoza innych klas. W związku z tym nie ma zabezpieczenia dla klasy BankAcct.
na przykład każdy programista może utworzyć inną klasę. Stworzy instancję klasy BankAcct i może zmienić oprocentowanie w ten sposób:
class Myclass { public static void main(String args ){ BankAcct ba = new BankAcct(); ba.calInterest(11.5); } }
Tak więc metoda calInterest() jest bardzo wrażliwa. Musi być chroniony przed osobami z zewnątrz, ponieważ konta salda mogą być aktualizowane z zewnątrz przez dowolną inną osobę. Tylko upoważniona osoba powinna mieć możliwość aktualizacji salda.
aby zapewnić bezpieczeństwo metodzie calInterest() i stopie procentowej, jeśli umieścimy kod metody calInterest() wewnątrz wewnętrznej klasy i uczynimy ją prywatną, nikt nie może uzyskać do niej dostępu z zewnątrz klasy. Spójrz na kod.
class BankAcct { . . . . . . . . private class Interest { private double rate; void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance = " +bal); } }}
teraz pytanie brzmi, jak uzyskać dostęp do klasy wewnętrznej?
aby uzyskać dostęp do klasy wewnętrznej, utworzymy metodę contact() wewnątrz klasy zewnętrznej. W metodzie contact() utworzymy obiekt klasy wewnętrznej i będziemy mogli uzyskać dostęp do jej elementów.
osoba z banku uwierzytelniania może wchodzić w interakcje z klasą wewnętrzną poprzez wywołanie metody contact (). Kiedy metoda contact() zostanie wywołana, zostanie on zweryfikowany za pomocą hasła, a następnie będzie mógł użyć wewnętrznej klasy i uzyskać do niej dostęp.
tak więc Klasa wewnętrzna może zapewnić mechanizm bezpieczeństwa dla ważnego kodu w Javie.
typy klas wewnętrznych w Javie
na podstawie deklaracji i zachowań, istnieją zasadniczo cztery typy klas wewnętrznych w Javie. Są one następujące:
- Normalna lub regularna Klasa wewnętrzna
- metoda lokalna Klasa wewnętrzna
- anonimowa Klasa wewnętrzna
- statyczna zagnieżdżona Klasa wewnętrzna
w tym samouczku zrozumiemy każdą z nich w skrócie.
1. Normalna lub regularna Klasa wewnętrzna: Klasa utworzona wewnątrz innej klasy i poza metodą bez statycznego modyfikatora jest nazywana zwykłą lub normalną klasą wewnętrzną.
2. Method local inner class: Klasa zadeklarowana w method klasy zewnętrznej nazywa się method local Inner class.
3. Anonimowa Klasa wewnętrzna: Klasa zadeklarowana bez nazwy w ogóle nazywa się anonimową klasą wewnętrzną.
4. Statyczna zagnieżdżona Klasa wewnętrzna: Klasa zadeklarowana z modyfikatorem statycznym wewnątrz klasy jest nazywana statyczną zagnieżdżoną klasą wewnętrzną. Jest również znany jako klasa zagnieżdżona najwyższego poziomu. Może uzyskać dostęp tylko do statycznych elementów klasy zewnętrznej.
Uwaga: klasy wewnętrzne regular, method-local i anonymous są niestatycznymi klasami zagnieżdżonymi.
zalety klasy wewnętrznej
w Javie zasadniczo istnieje pięć zalet klasy wewnętrznej. Są one następujące:
1. Klasa wewnętrzna zapewnia sposób grupowania klas i interfejsów w jednym miejscu, które logicznie należy do siebie.
2. Może bezpośrednio uzyskać dostęp do wszystkich zmiennych i metod klasy zewnętrznej, w tym prywatnych.
3. Służy do tworzenia bardziej czytelnego i łatwego do utrzymania kodu.
4. Potrzebuje mniej kodu do napisania.
5. Zwiększa kapsułkowanie.
różnica między klasą zagnieżdżoną a klasą wewnętrzną w Javie
Klasa zagnieżdżona jest klasą zdefiniowaną wewnątrz innej klasy. Istnieją dwa typy zagnieżdżonych klas: statyczne i niestatyczne. Niestatyczna Klasa zagnieżdżona jest klasą wewnętrzną.
mam nadzieję, że ten poradnik obejmuje wszystkie ważne funkcje klasy wewnętrznej w Javie z przykładowymi programami czasu rzeczywistego. Mam nadzieję, że zrozumieliście podstawową ideę używania klasy wewnętrznej w Javie.
dzięki za przeczytanie!!!Next ⇒ Member inner class in Java
Pre Prev Next ⇒