모든 클래스들은 Object 클래스를 상속합니다.
만약 상속을 하는 클래스가 없다면 자동적으로 컴파일이 java.lang.Object 클래스를 상속한 것으로 인식합니다.
ex) class MyClass extends Object {...}
내가 작성한 클래스가 어떤 클래스를 상속하고 있는지 확인하기 위해서는
Source -> Override / Implement Mathods 탭을 클릭하시면 확인할 수 있습니다.
상속하고 있는 클래스들의 목록이 뜹니다. Object를 상시 상속하고 있는 것을 확인할 수 있습니다.
tip) 여기서 사용하고 싶은 것들을 클릭하면 오버라이드 할 수 있는 형태들이 자동으로 양식 완성 됩니다. ok를 누르면 출력 화면에서 확인할 수 있습니다.
만약 클래스가 다른 클래스를 상속한다면
ex) class MyClass extends OtherClass {...}
의 형태로 표현할 수 있지만 결과적으로 Other 클래스도 결과적으로는 Object 클래스의 자식 클래스 입니다.
즉, 모든 클래스들은 간접적으로 Object 클래스를 상속하는 형태가 됩니다.
예를 들어
System.out.println
public void println(Object x) {
. . .
String s = x.toString();
. . .
}
String 또한 오브젝트 클래스의 자식 클래스 이므로 오브젝트 안를 상속한 기능을 사용하는 것과 동일합니다.
toString 메소드는 Object 클래스의 메소드였음을 알 수 있어요.
즉 String 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";
}
}
클래스는 상속할 수 있지만 String 은 final로 선언되어 있기 때문에 상속을 할 수 없습니다.
이렇게 final 로 선언된 클래스는 상속이 불가능합니다.
public final class MyLastCLS {...}
→ MyLastCLS 클래스는 다른 클래스가 상속할 수 없음
메소드 또한 final 이 선언되면 오버라이딩을 할 수 없습니다.
class Simple {
// 아래의 메소드는 다른 클래스에서 오버라이딩 할 수 없음
public final void func(int n) {...}
}
오버라이딩을 선언하는 방법은 @Override 을 작성함으로써 가능합니다.
하지만 작성을 하든, 하지 않든 결과물은 동일합니다.
한 가지 차이점은 @Override 를 선언하고 오버라이딩을 하고 오버라이딩의 규칙에 어긋나면 컴파일 오류가 발생한다는 것입니다.
아래의 예제를 통해 확인해볼게요.
class Runner{
void running() {
System.out.println("호다닥 호다닥")
}
}
class FastRunner extends Runner{
@Override // 어노테이션 annotation
void running() {
System.out.println("도도도도");
}
}
위에 적힌 코드처럼 작성할 경우 오버 라이딩을 할 때 @Override 을 쓰든 해당 코드를 삭제하든 동일한 결과가 출력됩니다.
하지만 그 안에 인수를 넣었을 때, 오버 라이딩 선언을 하지 않았다면 해당 코드는 오버 로딩으로 인식하여 int의 값을 a로 인식했겠지만
오버 라이딩 선언을 했으므로 인수 a를 넣었을 때 오류가 발생합니다.
'자바 > 자바 입문 공부일지' 카테고리의 다른 글
자바 기초 공부 일지 27. 추상 클래스 (0) | 2022.10.31 |
---|---|
자바 기초 공부 일지 26. 인터페이스interface , 구현implements (0) | 2022.10.31 |
자바 기초 공부 일지 24. 메소드 오버라이딩, instanceof 연산자 (0) | 2022.10.31 |
자바 기초 공부 일지 23. 클래스 상속과 생성자 (0) | 2022.10.31 |
자바 기초 공부 일지 22. 2차원 배열, 2차원 배열 초기화 (0) | 2022.10.31 |