문제 발생
Cannot reduce the visibility of the inherited method from Object

문제 원인
메소드를 오버라이딩 할 때, 접근제한자의 범위를 줄일 수는 없다.


Person 클래스에서 public으로 study() 메소드를 선언한 다음, Person을 상속받은 Student 클래스에서 default 접근제어자로 메소드 오버라이딩을 하려고 하자 예외가 발생한다.
그런데 Person클래스에서는 다른 클래스를 extend 하지 않았는데도 toString() 메소드를 default로 선언하면 예외가 발생하게 된다.
https://docs.oracle.com/javase/8/docs/api/
Java Platform SE 8
docs.oracle.com
이 내용은 Java Document에서 Object 클래스의 내용을 참조하면 알 수 있다.

Object 클래스는 모든 클래스의 super클래스이다. 즉, 우리가 Person extends Object 라고 명시하지 않았어도 Object 클래스의 하위 클래스인 것이다.

그리고 Object 클래스는 toString()이라는 메서드를 가지고 있다. 따라서, Person 클래스에서 toString()을 선언하는 것은 Object 클래스의 toString() 메서드를 오버라이딩하는 것이 된다.
그런데 Object 클래스에서 toString()의 접근제한자는 public이므로 이보다 좁은 범위의 접근 제한자를 사용하려 하면 예외가 발생하게 된다.
'Backend > Java-Spring' 카테고리의 다른 글
[Redis] LocalDateTime 직렬화/역직렬화 오류 발생 (1) | 2024.11.24 |
---|---|
[eclipse] xml파일의 "Downloading external resources is disabled." 오류 해결 (0) | 2024.04.28 |
[Java] ArrayList와 LinkedList의 구현을 통한 성능 비교 (2) | 2023.11.25 |
[알고리즘] 알고리즘 성능을 분석하는 상환 분석 (Amortized Analysis) (1) | 2023.11.22 |
[Java] 추상클래스와 인터페이스의 비교 (2) | 2023.10.17 |