JavaRush /Java Blog /Random-KO /질문과 답변: 최종 클래스에서 추상 메소드를 정의하는 것이 가능합니까?

질문과 답변: 최종 클래스에서 추상 메소드를 정의하는 것이 가능합니까?

Random-KO 그룹에 게시되었습니다
이 흥미롭고 중요한 질문은 Java 개발자 자리에 대한 전화 인터뷰 중 독자 중 한 명에게 물었습니다. 자바 언어에서는 추상 클래스를 만드는final 것이 불가능하다는 것을 알면서도 질문의 표현에 혼란을 느꼈다. 대답은 간단합니다. 아니요, final-class에는 추상 메서드가 있을 수 없습니다. 왜? 왜냐하면 Java 언어 클래스에서 추상 메소드를 선언하자마자 이 클래스는 자동으로 추상화되고 finalJava 언어에서는 추상 클래스를 만들 수 없기 때문입니다. 이는 Java 클래스 에 추상 메소드가 final있을 수 없음을 의미합니다.
질문과 답변: 최종 클래스에서 추상 메소드를 정의하는 것이 가능합니까?  - 1
많은 Java 개발자는 문구 때문에 이 질문에 대답할 때 혼란스러워합니다. 질문하는 사람이 일반적인 개념을 잘 알고 있다고 하더라도 클래스에 추상 메서드를 선언하면 클래스가 추상화된다는 사실을 깨닫지 못할 수도 있고, Java에서는 추상 클래스를 만들 수 없습니다 final. 이 점은 이 질문을 보다 일반적이고 자주 묻는 질문과 구분합니다. Java에서 클래스를 추상 클래스와 최종 클래스로 동시에 선언하는 것이 가능합니까? final-class에서 추상 메소드를 선언하는 것이 불가능하다는 것을 보여주기 위해 하나의 예제 코드를 살펴보겠습니다 . 추상 메서드가 있는 클래스를 Hello.java만들어 보겠습니다 . public finalHelloprint()
public final class Hello {
  public abstract void print();
}
이 코드를 IDE에 입력하면 다음과 같은 오류 메시지가 표시됩니다. Hello추상 메서드를 선언할 수 있으려면 추상 클래스여야 한다는 내용입니다.
질문과 답변: 최종 클래스에서 추상 메소드를 정의하는 것이 가능합니까?  - 2
질문과 답변: 최종 클래스에서 추상 메소드를 정의하는 것이 가능합니까?  - 삼
메모장에 이 코드를 입력하고 명령줄에서 javac 유틸리티를 사용하여 컴파일하는 경우에도 동일한 일이 발생합니다. Java 사양에 따르면 클래스 내부에 추상 메소드를 선언하자마자 해당 클래스는 추상 클래스가 되며, finalJava에서는 추상 클래스를 만들 수 없기 때문에 컴파일러에서 오류가 발생합니다. 이는 Java 언어의 최상위 클래스와 중첩 클래스 모두에 해당됩니다. 중첩된 클래스에 추상 메서드를 선언하더라도 final오류는 동일합니다. 또 다른 관련 질문은 다음과 같습니다. Java의 추상 클래스가 정적 메소드를 가질 수 있습니까? 답변: 예, 가능합니다. 추상 클래스에서 정적 메서드를 선언하는 데에는 문제가 없습니다. 정적 메서드를 사용하려면 클래스의 인스턴스를 만들 필요가 없고 클래스 이름을 사용하여 간단히 호출할 수 있기 때문입니다. 아래와 같이 Java에서 정적인 클래스에 Hello메서드를 포함하도록 예제를 수정할 수 있습니다 .main()
public abstract class Hello {
  public abstract void print();
  public static void main(String args[]) {
     // Howой-то code
  }
}
보시다시피 컴파일 오류가 발생하지 않습니다. 이 코드는 문제 없이 컴파일됩니다. Java에서는 추상 클래스에서 정적 메서드를 완전히 안전하게 선언할 수 있기 때문입니다. 간략한 결론 -class 에서 추상 메소드를 선언하는 것은 불가능합니다 final. 이렇게 하면 Java 사양에 따라 클래스가 자동으로 추상화되기 때문입니다. 그리고 finalJava의 -class는 추상적일 수 없으므로 이는 허용되지 않으며 컴파일러는 오류를 발생시켜 이를 수행하지 못하게 합니다. 그러나 최종 클래스와 추상 클래스 모두에서 정적 메서드를 선언할 수 있으므로 이에 대한 문제는 없습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION