System.out.println(a);에서 a는 A 클래스의 인스턴스입니다. println 메소드는 인자로 주어진 객체의 toString 메소드를 호출하여 그 결과를 출력합니다. A 클래스는 toString 메소드를 오버라이드하지 않았으므로, Object 클래스의 toString 메소드가 호출됩니다. Object 클래스의 toString 메소드는 객체의 클래스 이름, @ 기호, 그리고 16진수 해시코드를 반환합니다⁹. 따라서 A@28a418fc라는 결과가 출력된 것입니다.final 키워드는 마지막이라는 의미를 가지며, final이 붙은 요소는 초기화 이후에 수정할 수 없습니다²¹. final은 변수, 메서드, 클래스에 부여할 수 있으며, 어느 위치에 선언되는지에 따라 기능이 달라집니다²¹. final이 붙은 클래스는 상속을 받을 수 없으며, final이 붙은 메서드는 오버라이드할 수 없습니다¹⁹.@Override 어노테이션은 자식 클래스의 메서드가 부모 클래스의 메서드를 오버라이드한다는 것을 명시적으로 선언하는 데 사용됩니다¹⁴¹⁶. 이 어노테이션은 컴파일러에게 해당 메서드가 부모 클래스의 메서드를 정확하게 오버라이드하는지 확인하도록 요청합니다¹⁵¹⁸. 이를 통해 실수로 메서드 시그니처를 잘못 작성하는 등의 오류를 방지할 수 있습니다¹⁵.public static void main(String[] args) {Object obj = new Circle(10);
System.out.println(obj);
}
//출력: 넓이는 314.134 입니다.
class Circle {
private double radius;
private final double PI = 3.141592653589793;
public Circle(double radius) {
this.radius = radius;
}
public double getArea() {
return PI * radius * radius;
}
@Override
public String toString() {
return "넓이는 " + getArea() + " 입니다.";
}
}
public class Main {
public static void main(String[] args) {
Object obj = new Circle(10);
System.out.println(obj);
}
}
이 코드는 Circle 클래스의 인스턴스를 생성하고, 이 인스턴스의 toString 메소드를 호출하여 원의 넓이를 출력합니다. Circle 클래스의 toString 메소드는 원의 넓이를 계산하여 "넓이는 314.1592653589793 입니다."라는 문자열을 반환합니다.