2012-11-11 7 views
6

Dlaczego klasa B nie może stać się publiczną? Jak używać klasy w innych klasach? Czy lepiej jest zdefiniować to w Cons ?!Dlaczego dwie klasy publiczne nie mogą być zdefiniowane w jednym pliku w java?

// public class B { why not? 

    class B { 
     int x; 
     B (int n) { 
      x=n; 
      System.out.println("constructor 'B (int n)' called!"); 
     } 
    } 

    public class Cons { 
     public static void main(String[] args) {B b = new B();} 
    } 
+0

Powodem przechowywania jednej publicznej klasy na plik źródłowy jest szybsze tworzenie kompilacji i wyszukiwanie klas, ponieważ umożliwia to bardziej wydajne wyszukiwanie źródła i kompilowanych plików podczas łączenia (instrukcje importowania), więcej informacji na https: // programmingmitra.blogspot.in/2016/05/Why-Single-Java-Source-File-Can-Not-Have-More-Than-One-public-class.html –

Odpowiedz

12

zgodnie ze specyfikacją języka Java, nie może być tylko jedna klasa publiczna w pliku (.java) i nazwa pliku powinna być taka sama jak nazwa klasy publicznej.

Jeśli chcesz, aby klasa B była dostępna w innych placówkach, możesz utworzyć oddzielny plik B.java i przenieść kod klasy B do tego pliku.

Ten numer thread może podać więcej informacji.

1

Umieść swoje zajęcia w różnych plikach.

Nazwa klasy powinna być zgodna z nazwą pliku.

7

Pytanie: Dlaczego dwóch klas publicznych nie można zdefiniować w jednym zasięgu klasy w języku Java?

A. Po prostu sposób zaprojektowania języka. Gdy się do tego przyzwyczaisz, okaże się, że pomaga to w uporządkowaniu kodu.

Pytanie: Dlaczego klasa B nie może stać się publiczną?

A. Może, ale musi znajdować się w pliku o nazwie B.java. I musi to być jedyna klasa publiczna w tym pliku.

Pytanie: Jak korzystać z zajęć w innych klasach?

A. Być może zechcesz przeformułować pytanie. Istnieje jednak wiele podejść:

  • Uczyń klasę publiczną, stwórz instancję i metody połączeń.
  • Dodaj klasę do tego samego pliku, nie upublicznij go (nie będziesz w stanie), stwórz instancję i wywołaj metody na tym samym pliku. Będziesz mógł używać go z innych klas w tym samym pliku lub pakiecie. To jest "domyślny" modyfikator dostępu, co oznacza, że ​​będziesz mógł utworzyć instancję tej klasy z innych klas w tym samym pakiecie.
  • Ustaw klasę wewnętrzną (lub zagnieżdżoną), stwórz instancję i wywołaj metody na niej. Dostęp do niej będzie możliwy tylko z poziomu jego klasy macierzystej. Ma to zwiększyć enkapsulację i uczynić kod bardziej czytelnym. http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

Q. Czy lepiej zdefiniować go wewnątrz minusy?

A. Ja osobiście nie uważam, że robię to bardzo często. Uważam, że sprawia, że ​​kod nieco bałagan, choć powyższe linki mówią inaczej.

+0

klasa zagnieżdżona może być również statyczna, w takim przypadku może być używana jako samodzielna klasa. – assylias

Powiązane problemy