Java 파일에 둘 이상의 클래스가있을 수 있습니까?


105

Java 파일에 둘 이상의 클래스를 갖는 목적은 무엇입니까? 저는 Java를 처음 사용합니다.

편집 : 퍼블릭 클래스 안에 내부 클래스를 만들어서 달성 할 수 있습니다. 맞죠?


답변:


128

예, 그럴 수 있습니다. 그러나 파일 당 하나의 공개 최상위 클래스 만있을 수 .java있으며 공개 최상위 클래스는 소스 파일과 동일한 이름을 가져야합니다.

하나의 소스 파일에 여러 클래스를 포함하는 목적은 관련 지원 기능 (내부 데이터 구조, 지원 클래스 등)을 기본 공용 클래스와 함께 묶는 것입니다. 이 작업을 수행하지 않는 것은 항상 괜찮습니다. 유일한 효과는 코드의 가독성에 영향을줍니다.


1
추가 클래스를 비공개로 유지하려면 실수로 해당 클래스를 사용하는 항목을 깨지 않고 나중에 완전히 변경할 수 있도록하려면 그렇게하는 것이 좋습니다.
Erich Kitzmueller 2009-06-09

3
1.0 호환성을 위해 여기에 있습니다 (중첩 된 클래스 이전). 언어의 큰 실수입니다. 이를 사용하는 가장 큰 장점은 IDE가 절망적 인 파일 처리를 제공한다는 것입니다.
Tom Hawtin-tackline

25
파일 당 하나의 공개 최상위 클래스. 파일 당 원하는만큼 많은 공용 내부 클래스가있을 수 있습니다.
erickson

@Tom, 실수, 내부 클래스 또는 파일 당 여러 최상위 클래스라고 생각하십니까?
finnw

@finnw 파일 당 여러 최상위 클래스. 너무 잘못 됐어요. 어디 java.awt.LightweightDispatcher?
Tom Hawtin-tackline

17

공용 클래스를 구현하려면 해당 클래스와 이름이 같은 파일에서이를 구현해야합니다. 단일 파일에는 하나의 공용 및 선택적으로 일부 개인 클래스가 포함될 수 있습니다. 이는 클래스가 공용 클래스에 의해 내부적으로 만 사용되는 경우에 유용합니다. 또한 공용 클래스에는 내부 클래스도 포함될 수 있습니다.

단일 소스 파일에 하나 이상의 개인 클래스가있는 것이 좋지만 내부 및 익명 클래스를 대신 사용하는 것이 더 읽기 쉽습니다. 예를 들어 익명 클래스를 사용하여 공용 클래스 내에 Comparator 클래스를 정의 할 수 있습니다.

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

    }
  };

Comparator 클래스는 일반적으로 공개되기 위해 별도의 파일이 필요합니다. 이런 식으로 사용하는 클래스와 함께 번들로 제공됩니다.


1
no-modifier가있는 파일에 있으면 실제로 개인 클래스가 아닙니다. 내부 클래스가 아니면 개인 클래스를 가질 수 없습니다. 그렇게했다면 누가 사용할 수 있습니까?
Bjorn 2011

10

예, 원하는만큼!

그러나 모든 파일에 하나의 "공용"클래스 만 있습니다.


6

.java 파일을 컴파일 단위라고합니다. 각 컴파일 단위에는 원하는 수의 최상위 클래스 및 인터페이스가 포함될 수 있습니다. 공개 최상위 유형이없는 경우 컴파일 단위의 이름은 무엇이든 지정할 수 있습니다.

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

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

컴파일 단위에는 하나의 공용 클래스 / 인터페이스 만있을 수 있습니다. cu는이 공개 최상위 유형과 똑같이 이름을 지정해야합니다.

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

주요 방법에 대한 중요 사항-1 부

2 부

(2 부에서 다루는 클래스 수 및 액세스 수준에 대한 포인트)


5

예, 둘 이상의 공용 클래스를 만들 수 있지만 중첩 된 클래스 여야합니다.

public class first {

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

    public class demo1
    {

        public class demo2
        {

        }
    }
}

4

익명 내부 클래스 외에도 공용 인터페이스를 구현하는 개인 내부 클래스가 사용됩니다 ( 이 문서 참조 ). 외부 클래스는 내부 클래스의 모든 개인 필드 및 메서드에 액세스 할 수 있습니다.

이를 통해 둘 중 하나의 구현을 노출하지 않고도 모델 및 해당 뷰와 같이 밀접하게 연결된 두 클래스를 만들 수 있습니다. 또 다른 예는 컬렉션과 이터레이터입니다.


4

일반적으로 파일 당 하나의 클래스가 있어야합니다. 이러한 방식으로 구성하면 클래스를 검색 할 때 해당 이름의 파일 만 검색하면된다는 것을 알 수 있습니다.

예외는 클래스가 하나 이상의 작은 도우미 클래스를 사용하여 가장 잘 구현되는 경우입니다. 일반적으로 해당 클래스가 동일한 파일에있을 때 코드를 따르는 것이 가장 쉽습니다. 예를 들어, 메소드 호출간에 일부 데이터를 전달하려면 작은 '튜플'래퍼 클래스가 필요할 수 있습니다. 또 다른 예는 Runnable 또는 Callable을 구현하는 '작업'클래스입니다. 너무 작아서 부모 클래스를 만들고 호출하는 것과 가장 잘 결합 될 수 있습니다.


4

예 200 % ,

예:

class A {
 void methodDeclaration() { System.out.println("!!!"); }
 }
 class B {
 public static void main(String[] args) {
new A().methodDeclaration();
    }
 }

2

예, 가능하지만 Java 컴파일러가 Public 클래스 이름과 동일한 이름의 .Class 파일을 생성하므로 패키지 내부에는 1 개의 공용 클래스 만있을 수 있습니다. 따라서 공용 클래스가 2 개 이상이면 선택하기가 어렵습니다. 컴파일러는 클래스 파일의 이름이어야합니다.



1

".java 파일 당 하나의 NON-STATIC 최상위 공개 클래스 만있을 수 있습니다"라고 생각합니다. 그렇지 않습니까?


여기에서 답하기보다는 질문으로해야합니다.
Ashish Kumar

1

싱글 톤 (응용 프로그램 실행 전체에 걸쳐 메모리에 하나의 인스턴스 만있는 프로그램에서 실행되는 클래스)을 구현하려는 경우 싱글 톤을 구현하는 방법 중 하나는 공용 클래스 내부에 전용 정적 클래스를 중첩하는 것입니다. . 그런 다음 내부 전용 클래스는 전용 인스턴스에 액세스하기위한 공용 메서드가 호출 될 때만 자신을 인스턴스화합니다.

이 위키 기사를 확인하십시오.

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

개념을 씹는 데 시간이 걸립니다.


1

.java 파일에는 이름이 파일과 동일한 공용 최상위 클래스가 하나만있을 수 있지만 모든 사람에게 내보내고 외부 클래스의 필드 / 메소드에 액세스 할 수있는 여러 공용 내부 클래스가있을 수 있습니다. : 에 AlertDialog.Builder 에 ( '공용 static "에 의해 수정) 에 AlertDialog ('공개 '로 수정)


1

예 하나의 .Java 파일에 둘 이상의 클래스가있을 수 있습니다. 그러나 당신은 그들 중 하나를 공개했습니다. 공용 클래스 이름과 동일한 이름으로 .java 파일을 저장합니다. .java 파일을 컴파일하면 .java 파일에 정의 된 각 클래스에 대해 별도의 .class 파일이 생성됩니다.

이 외에도 하나의 .java 파일에 둘 이상의 클래스를 정의하는 방법이 너무 많습니다.

  1. 내부 클래스의 개념을 사용하십시오.
  2. 익명 클래스의 개념 사용.

1

예 ! .java 파일에는 하나의 공용 클래스 만 포함될 수 있습니다.

이 두 클래스를 공용으로 지정하려면 A.java 및 B.java라는 두 개의 .java 파일에 넣어야합니다.


2
나는 당신의 응답 추가 아무것도 더 (12 개) 등의 답변보다는 확실하지 않다
고토

1

예, .java 파일 내에 둘 이상의 클래스를 가질 수 있습니다. 그 중 하나만 공개 될 수 있습니다. 나머지는 패키지 전용입니다. 그들은 비공개이거나 보호 될 수 없습니다. 공용 인 경우 파일에는 해당 클래스의 이름이 있어야합니다. 그렇지 않으면 해당 파일에 이름으로 ANYTHING을 지정할 수 있습니다.

하나의 파일에 많은 클래스가 있다는 것은 해당 클래스가 동일한 패키지에 있음을 의미합니다. 따라서 해당 패키지 내에 있지만 해당 파일에는없는 다른 클래스도 해당 클래스를 사용할 수 있습니다. 또한 해당 패키지를 가져올 때 가져 오는 클래스도 사용할 수 있습니다.

더 자세한 조사는 여기 에서 내 블로그 게시물을 참조하십시오 .


1
Stack Overflow에 오신 것을 환영합니다! 여기에서 다루지 않은 정보에 대해 설명 해주셔서 감사합니다. 또한 소유권을 선언하고 여기에 관련 정보를 포함하면서 블로그 게시물을 인용하는 일도 훌륭했습니다. 앞으로이 사이트에 더 많은 기여를하기로 결정했다면 (그리고 여러분이 그렇게하기를 바랍니다), 블로그를 인용 할 때 게시물이 계속 호평을받을 수 있도록 이 기사 를 고려 하십시오.
4castle

0

파일에는 하나의 공용 클래스 최상위 클래스 만있을 수 있습니다 . 해당 공용 클래스의 클래스 이름은 파일의 이름이어야합니다. 많은 공개 내부 클래스를 가질 수 있습니다.

하나의 파일에 많은 클래스를 가질 수 있습니다. 파일에서 다양한 수준의 클래스 가시성에 대한 제한은 다음과 같습니다.

최상위 클래스 :
1 개의 공용 클래스
0 개의 개인 클래스 (
모든 수의 기본 / 보호 된 클래스)

내부 클래스 :
가시성이있는 내부 클래스 수 (기본값, 개인, 보호, 공용)

내가 틀렸다면 나를 바로 잡으십시오.


0

예, 그럴 수 있습니다. 그러나 공용 클래스는 소스 파일과 이름이 같아야하므로 .java 파일 당 하나의 공용 클래스 만있을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.