Czy plik java może mieć więcej niż jedną klasę?

Jaki jest cel posiadania więcej niż jednej klasy w pliku Java ? Jestem nowy w Javie.

Edited: Można to osiągnąć, tworząc klasę wewnętrzną wewnątrz klasy publicznej, prawda?

 97
Author: Super Chafouin, 2009-06-09

17 answers

Tak, może. Jednak na plik .javamoże być tylko jedna klasa public top-level , a publiczne klasy najwyższego poziomu muszą mieć taką samą nazwę jak plik źródłowy.

Celem włączenia wielu klas w jeden plik źródłowy jest połączenie powiązanych funkcji wsparcia (wewnętrznych struktur danych, klas wsparcia itp.) wraz z główną klasą publiczną. Zauważ, że zawsze jest OK, aby tego nie robić-jedyny wpływ ma na czytelność (lub nie) Twojego kodu.

 117
Author: Sean Reilly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-12 23:58:19

Jeśli chcesz zaimplementować klasę publiczną, musisz zaimplementować ją w pliku o tej samej nazwie co ta klasa. Pojedynczy plik może zawierać jedną klasę publiczną i opcjonalnie kilka klas prywatnych. Jest to użyteczne, jeśli klasy są używane tylko wewnętrznie przez klasę publiczną. Dodatkowo Klasa publiczna może zawierać również klasy wewnętrzne.

Chociaż dobrze jest mieć jedną lub więcej klas prywatnych w jednym pliku źródłowym, powiedziałbym, że jest to bardziej czytelne, aby używać klas wewnętrznych i anonimowych. Na przykład można użyć anonimowej klasy do zdefiniowania klasy komparatora wewnątrz klasy publicznej:

  public static Comparator MyComparator = new Comparator() {
    public int compare(Object obj, Object anotherObj) {

    }
  };

Klasa komparatora zwykle wymaga oddzielnego pliku, aby była publiczna. W ten sposób jest on dołączony do klasy, która go używa.

 15
Author: kgiannakakis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-16 16:53:25

Tak, ile chcesz!

Ale tylko jedna klasa" Publiczna " w każdym pliku.

 10
Author: Alberto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-28 17:28:37

A .plik java nazywany jest jednostką kompilacji. Każda jednostka kompilacji może zawierać dowolną liczbę klas i interfejsów najwyższego poziomu. Jeśli nie ma publicznych typów najwyższego poziomu, to jednostkę kompilacji można nazwać dowolną.

//Multiple.java
//preceding package and import statements

class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...

W jednostce kompilacji może być tylko jedna publiczna Klasa/interfejs. C. U. musi być nazwany dokładnie tak, jak ten publiczny Typ najwyższego poziomu.

//Test.java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces

Ważne punkty dotyczące głównej metody-Część 1

Część 2

(punkty w odniesieniu do liczby klas i ich poziomów dostępu objętych częścią 2)

 5
Author: Utsav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 14:36:59

Poza anonimowymi klasami wewnętrznymi, innym zastosowaniem są prywatne klasy wewnętrzne, które implementują publiczny interfejs (zobacz ten artykuł). Klasa zewnętrzna ma dostęp do wszystkich prywatnych pól i metod klasy wewnętrznej.

Pozwala to na tworzenie dwóch ściśle powiązanych klas, takich jak model i jego Widok, bez ujawniania implementacji żadnej z nich. Innym przykładem jest zbiór i jego Iteratory.

 4
Author: Rich Apodaca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-09 06:08:52

Ogólnie rzecz biorąc, w pliku powinna być jedna klasa. Jeśli organizujesz rzeczy w ten sposób, to kiedy szukasz klasy, wiesz, że wystarczy wyszukać plik o tej nazwie.

Wyjątkiem jest sytuacja, gdy klasa jest najlepiej zaimplementowana przy użyciu jednej lub więcej małych klas pomocniczych. Zwykle kod jest najprostszy do naśladowania, gdy te klasy są obecne w tym samym pliku. Na przykład, możesz potrzebować małej klasy opakowującej "krotki", aby przekazać niektóre dane między wywołaniami metod. Innym przykładem są klasy "zadania" implementujące Runnable lub Callable. Mogą być tak małe, że najlepiej połączyć je z klasą rodzica, która je tworzy i wywołuje.

 4
Author: Confusion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-09 06:10:37

Tak, możesz utworzyć więcej niż jedną klasę publiczną, ale musi to być Klasa zagnieżdżona.

public class first {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }

    public class demo1
    {

        public class demo2
        {

        }
    }
}
 4
Author: Ganesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-02 05:33:21

Tak. 200%,

Przykład:

class A {
 void methodDeclaration() { System.out.println("!!!"); }
 }
 class B {
 public static void main(String[] args) {
new A().methodDeclaration();
    }
 }
 3
Author: Shivanandam Sirmarigari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-05 04:24:12

Tak, ale w każdym pakiecie może być tylko 1 klasa publiczna, ponieważ kompilator Javy tworzy .Plik klasy, który ma taką samą nazwę jak nazwa klasy publicznej, dlatego jeśli ich jest więcej niż 1 klasa publiczna, trudno byłoby wybrać dla kompilatora, że to, co powinno być nazwą pliku klasy.

 2
Author: Meetu Choudhary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-20 05:11:45

Myślę, że powinno być "na każdego może być tylko jedna niestatyczna Klasa publiczna najwyższego poziomu.java file". Prawda?

 2
Author: HolidayCactus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-16 02:41:27

.. Jednym z takich przykładów może być anonimowe klasy (napotkasz je podczas korzystania ze słuchaczy zdarzeń itp.).

 1
Author: laginimaineb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-09 05:46:56

Jeśli chcesz zaimplementować singleton, czyli klasę, która działa w twoim programie z tylko jedną instancją w pamięci podczas wykonywania aplikacji, to jednym ze sposobów zaimplementowania Singletona jest zagnieżdżenie prywatnej statycznej klasy wewnątrz klasy publicznej. Wtedy wewnętrzna Klasa prywatna tworzy instancje tylko wtedy, gdy wywołana jest jej publiczna metoda dostępu do prywatnej instancji.

Sprawdź tę wiki Artykuł,

Https://en.wikipedia.org/wiki/Singleton_pattern

Pomysł trochę trwa.

 1
Author: chrismjh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-26 20:09:16

W a .plik java, może być tylko jedna publiczna klasa najwyższego poziomu, której nazwa jest taka sama jak plik, ale może być kilka publicznych klas wewnętrznych, które można wyeksportować do wszystkich i uzyskać dostęp do zewnętrznych pól/metod klasy,na przykład: AlertDialog.Builder (modified by 'public static') in AlertDialog (modified by 'public')

 1
Author: Baoyang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-15 09:25:19

Tak, możesz mieć więcej niż jedną klasę w jednym .Plik Java . Ale upubliczniłaś jedną z nich . i uratować .plik java o tej samej nazwie co nazwa klasy publicznej. kiedy to skompilujesz .plik java zostanie oddzielony .pliki klas dla każdej klasy zdefiniowanej w .plik java .

Poza tym istnieje zbyt wiele metod definiowania więcej niż jednej klasy w jednej .plik java .

  1. użyj pojęcia klas wewnętrznych.
  2. Użyj koncepcji anonimowych klas .
 1
Author: Gaurav Varshney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-29 09:14:03

Tak ! .plik java może zawierać tylko jedną klasę publiczną.

Jeśli chcesz, aby te dwie klasy były publiczne, muszą być umieszczone w dwóch .pliki java: A.java oraz B.java.

 1
Author: Rakesh Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-03 15:40:22

Tak, możesz mieć więcej niż jedną klasę w A.plik java. Co najwyżej jeden z nich może być publiczny. Pozostałe to paczka-prywatna. Nie mogą być prywatne ani chronione. Jeśli plik jest publiczny, musi mieć nazwę tej klasy. W przeciwnym razie wszystko może być podane do tego pliku jako jego nazwa.

Posiadanie wielu klas w jednym pliku oznacza, że klasy te znajdują się w tym samym pakiecie. Tak więc inne klasy, które znajdują się w tym pakiecie, ale nie znajdują się w tym Pliku, mogą również używać tych klas. Ponadto, gdy ten pakiet jest importowany, Klasa importująca również może z nich korzystać.

Aby uzyskać bardziej szczegółowe dochodzenie, możesz odwiedzić mój wpis na blogu w tutaj .

 1
Author: Merter Sualp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-05 04:23:54

W pliku może być tylko jedna klasa Publiczna najwyższego poziomu. Nazwa klasy tej klasy publicznej powinna być nazwą pliku. Może mieć wiele publicznych klas wewnętrznych.

Możesz mieć wiele klas w jednym pliku. Limity dla różnych poziomów widoczności klas w pliku są następujące:

Klasy najwyższego poziomu:
1 klasa publiczna
0 Klasa prywatna
dowolna liczba domyślnych / chronionych klas

Klasy wewnętrzne:
dowolna liczba klasy wewnętrzne o dowolnej widoczności (domyślne, prywatne, chronione, publiczne)

Proszę mnie poprawić, jeśli się mylę.

 0
Author: Lakshmikant Deshpande,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-16 07:30:26