자바에 오버라이딩과(Overriding)과 오버로딩(Overloading)이 있는데 비슷한 이름이라 자주 헷갈리곤 한다.
이름은 비슷하지만 개념은 전혀 다르다.
메소드 오버라이딩 (Overriding)
상속관계에 있는 부모클래스에서 정의된 메소드를 상속받은 자식 클래스에서 다시 재정의를 하는것이다.
상속받은 메소드를 그대로 사용해도 되고, 다시 재정의해서 사용할수도 있다.
public class A {
void overridingTest() {
System.out.println("overridingTest A");
}
}
public class B extends A{
void overridingTest() {
System.out.println("overridingTest B");
}
}
public class Test {
public static void main(String[] args) {
B b = new B();
b.overridingTest();
}
}
// overridingTest B
메소드 오버로딩 (Overloading)
메소드의 이름은 같고 매개변수의 갯수나 유형이 다른 또 하나의 메소드를 만드는 것이다.
예를들어 어떤 메소드에서 인자를 int로만 받아들인다면 메소드를 호출하는 쪽에선 int로만 보내야 하기 때문에
int만 보내던가, double을 int로 변환을 해서 메소드를 호출해야 한다.
하지만 같은 메소드 이름으로 인자를 double로 오버로딩하게 되면 메소드를 호출하는 쪽에서 변환 없이
호출이 가능하기 때문에 호출하는 입장에서 더 편할수 있다.
public class Overload {
public int inputNumber(int a) {
return a;
}
public double inputNumber(double a) {
return a;
}
}
주의할점은
메소드 오버로드 시 인자 목록이 다르면 리턴 유형을 바꿔줘도 된다.
다만, 리턴 유형만을 바꿀 순 없다.
public class Overload {
public int inputNumber(int a) {
return a;
}
public double inputNumber(int a) {
return a;
}
}
// error
// Duplicate method inputNumber(int) in type Test
'JAVA' 카테고리의 다른 글
[Java] 자바 날짜 구하기 String to Date 형변환 Date to String (0) | 2020.07.31 |
---|---|
[Java] Jsoup 자바 웹 페이지 크롤링(HTML Parsing) (0) | 2020.06.18 |
[JAVA] Java 비밀번호 정규식 / ID 동일문자 / 같은 문자 / 연속 문자 / 연속 숫자 공통 Util 소스 (1) | 2020.02.25 |
[JAVA] JAVA 데이터 크기/범위/overriding/overloading (0) | 2020.02.18 |
[JAVA] JDK 설치 및 JAVA_HOME 환경변수 path 설정 (Windows10 64bit) (0) | 2020.02.12 |