답변:
예, 그럴 수 있습니다. 그러나 파일 당 하나의 공개 최상위 클래스 만있을 수 .java
있으며 공개 최상위 클래스는 소스 파일과 동일한 이름을 가져야합니다.
하나의 소스 파일에 여러 클래스를 포함하는 목적은 관련 지원 기능 (내부 데이터 구조, 지원 클래스 등)을 기본 공용 클래스와 함께 묶는 것입니다. 이 작업을 수행하지 않는 것은 항상 괜찮습니다. 유일한 효과는 코드의 가독성에 영향을줍니다.
java.awt.LightweightDispatcher
?
공용 클래스를 구현하려면 해당 클래스와 이름이 같은 파일에서이를 구현해야합니다. 단일 파일에는 하나의 공용 및 선택적으로 일부 개인 클래스가 포함될 수 있습니다. 이는 클래스가 공용 클래스에 의해 내부적으로 만 사용되는 경우에 유용합니다. 또한 공용 클래스에는 내부 클래스도 포함될 수 있습니다.
단일 소스 파일에 하나 이상의 개인 클래스가있는 것이 좋지만 내부 및 익명 클래스를 대신 사용하는 것이 더 읽기 쉽습니다. 예를 들어 익명 클래스를 사용하여 공용 클래스 내에 Comparator 클래스를 정의 할 수 있습니다.
public static Comparator MyComparator = new Comparator() {
public int compare(Object obj, Object anotherObj) {
}
};
Comparator 클래스는 일반적으로 공개되기 위해 별도의 파일이 필요합니다. 이런 식으로 사용하는 클래스와 함께 번들로 제공됩니다.
.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
(2 부에서 다루는 클래스 수 및 액세스 수준에 대한 포인트)
일반적으로 파일 당 하나의 클래스가 있어야합니다. 이러한 방식으로 구성하면 클래스를 검색 할 때 해당 이름의 파일 만 검색하면된다는 것을 알 수 있습니다.
예외는 클래스가 하나 이상의 작은 도우미 클래스를 사용하여 가장 잘 구현되는 경우입니다. 일반적으로 해당 클래스가 동일한 파일에있을 때 코드를 따르는 것이 가장 쉽습니다. 예를 들어, 메소드 호출간에 일부 데이터를 전달하려면 작은 '튜플'래퍼 클래스가 필요할 수 있습니다. 또 다른 예는 Runnable 또는 Callable을 구현하는 '작업'클래스입니다. 너무 작아서 부모 클래스를 만들고 호출하는 것과 가장 잘 결합 될 수 있습니다.
예 200 % ,
예:
class A {
void methodDeclaration() { System.out.println("!!!"); }
}
class B {
public static void main(String[] args) {
new A().methodDeclaration();
}
}
예, 가능하지만 Java 컴파일러가 Public 클래스 이름과 동일한 이름의 .Class 파일을 생성하므로 패키지 내부에는 1 개의 공용 클래스 만있을 수 있습니다. 따라서 공용 클래스가 2 개 이상이면 선택하기가 어렵습니다. 컴파일러는 클래스 파일의 이름이어야합니다.
".java 파일 당 하나의 NON-STATIC 최상위 공개 클래스 만있을 수 있습니다"라고 생각합니다. 그렇지 않습니까?
싱글 톤 (응용 프로그램 실행 전체에 걸쳐 메모리에 하나의 인스턴스 만있는 프로그램에서 실행되는 클래스)을 구현하려는 경우 싱글 톤을 구현하는 방법 중 하나는 공용 클래스 내부에 전용 정적 클래스를 중첩하는 것입니다. . 그런 다음 내부 전용 클래스는 전용 인스턴스에 액세스하기위한 공용 메서드가 호출 될 때만 자신을 인스턴스화합니다.
이 위키 기사를 확인하십시오.
https://en.wikipedia.org/wiki/Singleton_pattern
개념을 씹는 데 시간이 걸립니다.
.java 파일에는 이름이 파일과 동일한 공용 최상위 클래스가 하나만있을 수 있지만 모든 사람에게 내보내고 외부 클래스의 필드 / 메소드에 액세스 할 수있는 여러 공용 내부 클래스가있을 수 있습니다. : 에 AlertDialog.Builder 에 ( '공용 static "에 의해 수정) 에 AlertDialog ('공개 '로 수정)
예 하나의 .Java 파일에 둘 이상의 클래스가있을 수 있습니다. 그러나 당신은 그들 중 하나를 공개했습니다. 공용 클래스 이름과 동일한 이름으로 .java 파일을 저장합니다. .java 파일을 컴파일하면 .java 파일에 정의 된 각 클래스에 대해 별도의 .class 파일이 생성됩니다.
이 외에도 하나의 .java 파일에 둘 이상의 클래스를 정의하는 방법이 너무 많습니다.
예, .java 파일 내에 둘 이상의 클래스를 가질 수 있습니다. 그 중 하나만 공개 될 수 있습니다. 나머지는 패키지 전용입니다. 그들은 비공개이거나 보호 될 수 없습니다. 공용 인 경우 파일에는 해당 클래스의 이름이 있어야합니다. 그렇지 않으면 해당 파일에 이름으로 ANYTHING을 지정할 수 있습니다.
하나의 파일에 많은 클래스가 있다는 것은 해당 클래스가 동일한 패키지에 있음을 의미합니다. 따라서 해당 패키지 내에 있지만 해당 파일에는없는 다른 클래스도 해당 클래스를 사용할 수 있습니다. 또한 해당 패키지를 가져올 때 가져 오는 클래스도 사용할 수 있습니다.
파일에는 하나의 공용 클래스 최상위 클래스 만있을 수 있습니다 . 해당 공용 클래스의 클래스 이름은 파일의 이름이어야합니다. 많은 공개 내부 클래스를 가질 수 있습니다.
하나의 파일에 많은 클래스를 가질 수 있습니다. 파일에서 다양한 수준의 클래스 가시성에 대한 제한은 다음과 같습니다.
최상위 클래스 :
1 개의 공용 클래스
0 개의 개인 클래스 (
모든 수의 기본 / 보호 된 클래스)
내부 클래스 :
가시성이있는 내부 클래스 수 (기본값, 개인, 보호, 공용)
내가 틀렸다면 나를 바로 잡으십시오.
예, 그럴 수 있습니다. 그러나 공용 클래스는 소스 파일과 이름이 같아야하므로 .java 파일 당 하나의 공용 클래스 만있을 수 있습니다.