자바를 공부할 때 가끔 메소드에 빨간 줄이 떠서 확인해보면
오버라이드 어노테이션을 붙여달라고 할 때가 있었다.
그러면 그냥 필요한가보다..하고 클릭 한 번으로 빨간줄을 없애곤 했는데
요즘 초급 강의를 들으면서 드디어 오버라이딩을 하는 이유와 오버로딩의 차이점도 알게 되었다.
이런걸 보면 진짜 6개월동안 어떻게 공부를 한건지.. 취직은 어떻게 한 건지 나조차도 의문일 때가
많다.. 뭐 지금이라도 알아가는걸 다행이라고 생각해야되나..
: 기존에 없는 새로운 메소드를 정의(new)
기본 생성자와 매개변수가 있는 생성자를 생각하면 편할 것 같다.
class Test {
int x;
public Test() {
super();
}
public Test(int x, int y) { // 오버로딩
this.x = x;
this.y = y;
}
}
: 상속받은 메소드의 내용을 변경
class Test { // 부모 클래스
int x;
int y;
public String test() {
return "x : " + x + ", y : " + y;
}
}
class Test2 extends Test{ // 자식 클래스
int z;
@Override // 오버라이딩 했다고 알려주는 어노테이션
public String test() { // 부모의 test() 메소드 오버라이딩
return "x : " + x + ", y : " + y + ", z : " + z;
}
}
class Test3 {
public static void main(String[] args) {
Test t1 = new Test();
Test2 t2 = new Test2();
t1.x = 8;
t1.y = 2;
t2.x = 4;
t2.y = 6;
t2.z = 10;
System.out.println(t1.test()); // 부모 클래스의 test()
System.out.println(t2.test()); // 자식 클래스의 test()
}
}
// 결과
x : 8, y : 2
x : 4, y : 6, z : 10
Test2 클래스에서 test()를 오버라이딩 하지 않고
test2()로 다른 메소드를 만들어 줄 수도 있지만 굳이 오버라이딩을 하는 이유는
같은 기능을 하는 메소드라는 것을 알려줄 수 있기 때문에
: 부모의 메소드로부터 오버라이딩 됐다고 알려주는 역할
@Override을 쓰지 않으면 부모의 메소드을 오버라이딩 했다는 점을 모를 수도 있고,
만약 오타가 났을 때 다른 메소드로 인식해버린다.
@override를 사용했는데 부모 메소드의 이름이 다르거나 없다면 빨간줄 쭈욱~
위의 코드를 더 간단하게 작성하려면 java에 내장되어 있는 toString() 메소드를 사용하면 된다.
근데 toString()은 @override가 따로 안 먹는 것 같다..
Test 클래스의 toString() 오타났었는데 @Override가 안 잡아줘서 한참을 해멨다..
(왜 안 잡아주는거지..)
package practice;
class Test {
int x;
int y;
public Test() { // 기본 생성자
}
public Test (int x, int y) {
this.x = x;
this.y = y;
}
public String toString() {
return "x : " + x + ", y : " + y;
}
}
class Test2 extends Test{
int z;
public Test2(int x, int y, int z) {
super(x, y);
this.z= z;
}
@Override
public String toString() {
return "x : " + x + ", y : " + y + ", z : " + z;
}
}
public class Test3 {
public static void main(String[] args) {
Test t1 = new Test(3,5);
Test2 t2 = new Test2(1, 7, 10);
System.out.println(t1.toString());
System.out.println(t1);
System.out.println(t2.toString());
System.out.println(t2);
}
}
// 결과
x : 3, y : 5
x : 3, y : 5
x : 1, y : 7, z : 10
x : 1, y : 7, z : 10
위 내용은 자바의 정석 유튜브를 참고하여 작성하였습니다.