Object obj = new Circle(10);
System.out.println(obj);
class Circle {
private double radius;
Circle(double radius) {
this.radius = radius;
}
double getArea() {
return Math.PI * radius * radius;
}
@Override
public String toString() {
return ("넓이는 " + getArea() + " 입니다.");
}
}
final class: 마지막 클래스이다. → 클래스가 더 이상 다른 상속할 수 없다.
final mehod: 마지막 함수이다. → 다른 클래스에서 overriding 할 수 없다.
interface
interface + interface명 ();→ 함수 선언부(정의), body없음 (당연히 생성자 만들 수 없음) = 추상메소드
implements 키워드로 인터페이스를 구현할 (자손)클래스 표시
둘 이상의 다중 인터페이스 구현 가능 (implements A, B 쉼표로 구분)
body가 없으므로 객체 생성 불가, 선언 혹은 구현만 가능함
무조건 public 이어야 한다.
이름은 -able 혹은 I+이름으로 짓는 것이 관례
class
class + class명 () {body} → body 있음(함수, 변수 모두 올 수 있다.)
extends 키워드로 상속 표시함
단일 상속만 가능함 (자식이 상속) / 다중 상속 안됨
객체 생성 가능
→ interface와 class를 동시에 상속, 구현 가능
try {
int num = 6 / 0;
} catch (Exception e) {
e.printStackTrace();
} catch (InputMismatchException e) {
e.printStackTrace();
}
Exception이 InputMismatchException보다 상위 클래스에 위치하고 있으므로 모든 예외 상황을 체크할 수 있다.
그래서 여기에서 모든 예외가 처리 되기 때문에 세부 체크를 하는 InputMismatchException이나 ArithmeticException 등이 그 아래 catch로 온다면 사실상 그 문장을 통과할 일이 없기 때문에 불필요한 코드임을 알려주기 위해 에러가 난다.
!!! Polymorphism이 핵심 !!!
컴파일 에러 (Compillation Error)
코드에 오류가 있을 시 컴파일 단계에서 미리 발견 할 수 있다.
실시간 에러 (Runtime Error)
실시간 오류 발생시 자바의 기본 에외처리 메커니즘에 의해 JVM이 해당 함수에서 프로그램을 종료한다.
try-catch-finally 을 사용하여 오류 발생시 프로그램이 종료되지 않게 예외처리를 할 수 있다.
예외에 대한 처리 방법은 프로그래머가 결정할 수 있다.