[Java/객체지향] 오버로딩과 오버라이딩
2024. 8. 19. 20:13ㆍ프로그래밍 언어/Java
오버로딩
- 한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것
- 매개변수는 다르지만, 같은 의미의 기능 수행
- ex) 메서드 대표적 이름은 ‘add, println, round’ → 어떤 작업을 수행하는 것이 메서드라 대부분 동사 → 이름이 같다 = 하는 동작이 같다.
오버로딩 성립 조건 3가지
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 타입은 관계없다.
class Ex6_10 {
public static void main(String args[]){
MyMath3 mm = new MyMath3();//인스턴스 생성
int result = mm.add(3, 3);
System.out.println("mm.add(3, 3) 결과:" + result);//인스턴스메소드 호출
System.out.println("mm.add(3L, 3) 결과:" + mm.add(3L, 3));
System.out.println("mm.add(3, 3L) 결과:" + mm.add(3, 3L));
System.out.println("mm.add(3L, 3L) 결과:" + mm.add(3L, 3L));
int[] a = {100,200,300};
System.out.println("mm.add(a) 결과: "+ mm.add(a));
}
}
class MyMath3{
int add(int a, int b){
System.out.println("int add(int a, int b) - ");
return a+b;}
long add(int a, long b){
System.out.println("int add(int a, long b) - ");
return a+b;}
long add(long a, int b){
System.out.println("long add(long a, int b) - ");
return a+b;}
long add(long a, long b){
System.out.println("long add(long a, long b) - ");
return a+b;}
int add(int[] a){
System.out.println("int add(int[] a) - ");
int result =0;
for(int i=0;i<a.length;i++)
result += a[i];
return result;}
}
메서드 오버라이딩
- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
class MyPoint3{
int x;
int y;
String getLocation(){
return "x:"+x+"y:"+y;
}
}
class MyPoint3D extends MyPoint3{
int z;
//조상의 getLocation()을 오버라이딩
String getLocation(){
return "x:"+x+", y:"+y+", z:"+z;
}
}
public class OverrideTest {
public static void main(String[] args) {
MyPoint3D p = new MyPoint3D();
p.x=3;
p.y=5;
p.z=7;
System.out.println(p.getLocation());
}
}
오버라이딩의 조건
- 선언부(반환타입, 메서드이름, 매개변수 목록)가 조상 클래스의 메서드와 일치해야함
- 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
오버로딩vs오버라이딩
- 오버로딩: 기존에 없는 새로운 메서드를 정의하는 것(대신 이름은 같은) → 상속과 관계X
- 오버라이딩: 상속받은 메서드의 내용을 변경하는 것→ 상속과 관계O
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java/객체지향] 클래스의 관계 - 상속/포함관계/단일상속/Object클래스 (0) | 2024.08.21 |
---|---|
[Java/객체지향] 생성자, 생성자의 조건, 참조변수 this (0) | 2024.08.20 |
[Java/객체지향] static 메서드와 인스턴스메서드 (0) | 2024.08.18 |
[Java/객체지향] 매개변수 (0) | 2024.08.18 |
[Java/객체지향] 메서드 (0) | 2024.08.17 |