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

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

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



답변

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

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


답변

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

단일 소스 파일에 하나 이상의 개인 클래스가있는 것이 좋지만 내부 및 익명 클래스를 대신 사용하는 것이 더 읽기 쉽습니다. 예를 들어 익명 클래스를 사용하여 공용 클래스 내에 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

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

2 부

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


답변

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

public class first {

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

    public class demo1
    {

        public class demo2
        {

        }
    }
}


답변

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

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


답변

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

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