모든 클래스는 Object 클래스를 상속한다.
class MyClass { ... }
상속하는 클래스가 없다면
컴파일러에 의해 다음과 같이 java.lang.Object 클래스를 상속하게 코드가 구성된다.
class MyClass extends Object { ... }
class MyClass extends OtherClass { ... }
이렇듯 다른 클래스를 상속한다면 Object 클래스를 직접 상속하지는 않게 된다.
그러나 간접적으로 (Object 클래스를 상속하는 클래스를 상속하는 형태로) Object 클래스를 상속하게 된다.
모든 클래스가 Object를 직접 또는 간접 상속하므로
// System.out.println
public void println(Object x) {
. . .
String s = x.toString();
. . .
}
모든 클래스는 Object를 상속하므로 위 메소드의 인자로 전달이 가능하다.
toString 메소드는 Object 클래스의 메소드였음을 알 수 있다.
프로그래머가 정의하는 toString은 메소드 오버라이딩
class Cake {
// Object 클래스의 toString 메소드를 오버라이딩
public String toString() {
return "My birthday cake";
}
}
class CheeseCake extends Cake {
// Cake 클래스의 toString 메소드를 오버라이딩
public String toString() {
return "My birthday cheese cake";
}
}
클래스와 메소드의 final 선언
public final class MyLastCLS { ... }
-> MyLastCLS 클래스는 다른 클래스가 상속할 수 없음
class Simple {
// 아래의 메소드는 다른 클래스에서 오버라이딩 할 수 없음
public final void func (int n) { ... }
}
@Override
class ParentAdder {
public int add(int a, int b) {
return a+b;
}
}
class ChildAdder extends ParentAdder {
@Override
public double add (double a, double b) {
System.out.println( "덧셈을 진행합니다." );
return a+b;
}
}
오버라이딩이 아니라 상속으로 두 클래스에 걸쳐서 형성된 메소드 오버로딩이다.
(오버라이딩이 성립할려면 메소드 이름과 반환타입, 매개변수 타입, 갯수 모두 같아야함!!!!)
따라서 컴파일 오류 발생!!!
-> 이런걸 막고자 @Override 애노테이션 사용!! (안전성을 높이기 위해 사용)
@Override
상위 클래스의 메소드를 오버라이딩 하는 것이 목적이라는 선언!
오버라이딩 하는 형태가 아니면 컴파일러가 오류 메시지 전달.
'# 02 > Java' 카테고리의 다른 글
[윤성우 열혈자바] 17-2. 인터페이스의 문법 구성과 추상 클래스 (0) | 2019.10.22 |
---|---|
[윤성우 열혈자바] 17-1. 인터페이스의 기본과 그 의미 (0) | 2019.10.22 |
[윤성우 열혈자바] 16-1. 상속이 도움이 되는 상황의 소개 (0) | 2019.10.22 |
[윤성우 열혈자바] 15-3. instanceof 연산자 (0) | 2019.10.22 |
[윤성우 열혈자바] 15-2. 메소드 오버라이딩 (0) | 2019.10.22 |