오버로딩과 오버라이딩
오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것
오버라이딩 : 상속받은 메서드의 내용을 변경하는 것
사전적 의미
- overload : 과적하다
- override : …보다 더 중요하다
class Parent{
void parentMethod(){}
}
class Child extends Parent{
void parentMethod(){} //오버라이딩
void parentMethod(int i){} // 오버로딩
}
오버로딩
같은 일을 하지만 매개변수를 달리해야하는 경우에 오버로딩을 구현함
조건
- 메서드 이름이 같아야함
- 매개변수의 개수 또는 타입이 달라야함
반환타입은 오버로딩을 구현하는데 아무런 영향을 주지 못함
옳은 예
void println() void println(boolean x) void println(char x) void println(char[] x) void println(double x) void println(float x) void println(int x) void println(long x) void println(short x) void println(byte x) // 메서드 이름은 같지만 매개변수의 타입에 따라서 구분가능함
틀린 예
int add (int a, int b){return a+b}; int add (int x, int y){return x+y}; // 메게변수 이름만 다를뿐 타입, 갯수가 같기 때문에 오버로딩이 아니며 컴파일러는 구분하지 못한다. int add(int a, int b){return a+b}; long add(int x, int y){return (long) (x+y)}; // 리턴타입만 다른 경우며 매개변수의 타입과 갯수가 일치하기 때문에 add(2, 5); 로 호출했을때 구분하지 못함
장점
같은 일을 하는데 변수명을 다르게 해야된다면.. 귀찮고 골치 아플듯
오버라이딩(Overriding)
조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것
상속받은 메서드를 그대로 사용하기도 하지만, 자신에 맞게 변경해야 하는 경우가 많음 이럴때 오버라이딩을 함
조건
메서드의 내용(블럭내에)만을 새로 작성하는 것이므로 선언부는 조상과 일치해야 함
- 자손 클래스에서 오버라이딩하는 메서드는 조상클래스의 메서드와
- 이름이 같아야함
- 매개변수가 같아야함
- 반환타입이 같아야함
조건의 예외
접근 제어자(Access modifier)와 예외(Exception)는 제한된 조건 하에서만 다르게 변경할 수 있음
- 접근 제어자는 조상클래스의 메서드보다 좁은 범위로 변경 할 수 없다.
- public > protected > default > private
- 조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
- Exception > IOException ..
- 인스턴스 메서드를 static 메서드로 또는 그 반대로 변경할 수 없다.
'Main > Java' 카테고리의 다른 글
[JAVA] 파일을 byte 배열로 변환 하는 방법 (0) | 2020.07.30 |
---|---|
제어자 public, protected, private .. (0) | 2020.02.07 |
[JAVA] 클래스변수 (Static 변수), static (0) | 2020.01.14 |
[JAVA] 생성자 (Constructor) , this(), this (0) | 2020.01.14 |
[JAVA] 가변인자, 파라미터 여러개 (0) | 2020.01.10 |