오버라이드란
부모클래스에게 상속받은 메소드를 상황이나 요건에 맞게 변형해서 사용하는 것이다.
이해를 위한 비유 : 커피가 든 잔을 줬는데 홍차가 땡겨서 커피 버리고 홍차를 따라 마시는 것
@Override는 오버라이드 하는 함수의 형식을 상속받는 함수의 형식과 다르게 하거나 이름을 다르게 하는 등의 실수를 방지해준다. 하지만 방지해주는거지 필수는 아니다.다만 실수 안 할 자신이 있다고 해도 보고 이해하기 편한데 안 쓸 이유도 굳이 없는 것 같다.
아래 예시에서
@Override가 있는 hello 메소드의 경우 String 매개변수를 안 쓸 경우 "부모클래스에 이거랑 같은 형식의 메소드가 없습니다."라고 에러가 뜬다. ide에서 친절하게 바로 만들기를 추천해주기도 한다.
@Override가 없는 hi 메소드의 경우 부모클래스의 hi는 String 매개변수가 있어야 하는데 자식 클래스의 hi는 매개변수가 존재하지 않는다. 그래서 오버라이드가 아니라 오버로드가 돼 버린다 , 단 형식을 지켜서 String 매개변수를 넣어주면( 주석처리 부분 ) 오버라이드 정삭적으로 된다.
class Parent {
public void hello(String name) {
System.out.println("안녕하세요 "+name);
}
public void hi(String name) {
System.out.println("안녕 " +name );
}
}
class Child extends Parent{
// @Override가 있는 경우
@Override
public void hello(String name) {
System.out.println("@Override 있는 안녕하세요");
}
// @Override가 없는 경우
public void hi() {
System.out.println("@Override 없는 안녕");
}
/* 부모클래스 형식을 맞춘 경우
public void hi(String name) {
System.out.println("@Override 없는 안녕 + 같은 양식");
}*/
}
public class over {
public static void main(String[] args) {
// TODO Auto-generated method stub
Child c = new Child();
c.hello("철수");
c.hi("철수");
c.hi();
}
}
출력----------------------
@Override 있는 안녕하세요
안녕 철수 (주석처리 부분 출력 : @Override 없는 안녕 + 같은 양식 )
@Override 없는 안녕
'CS' 카테고리의 다른 글
DI( Dependency Injection )과 IoC( Inversion of Control )에 대한 간단한 설명 (0) | 2023.04.04 |
---|---|
어노테이션( @ ) (0) | 2023.03.29 |
인터페이스( interface ) (0) | 2023.03.28 |
객체 지향의 대표 특징 4 : 다형성 (0) | 2023.03.28 |
객체 지향의 대표 특징 3 : 캡슐화 (0) | 2023.03.28 |