JAVA
(JAVA) 메소드 오버로딩 vs 메소드 오버라이딩
혀래이
2021. 7. 7. 17:11
1. 메소드 오버로딩
JAVA는 C언어와 다르게 함수명을 중복해서 정의할 수 있다. 조건과 특징은 아래와 같다.
- 같은 알고리즘(로직) 기능을 가지고 있어야 한다.
- 매개변수, 인자의 개수 or 데이터 타입(리턴 타입)이 달라야 한다. ( 하지만 기능은 같음 )
- 상속 관계 X
- 여러개 정의할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package test;
public class Test1 {
static int sum(int a, int b) {
return a+b;
}
static int sum(int a, int b, int c) {
return a+b+c;
}
static double sum(double a, double b) {
return a+b;
}
public static void main(String[] args) {
int a = 10, b = 20, c = 30;
double d = 14.2 , e = 15.5;
System.out.println(sum(a,b)); // 첫 번째 함수
System.out.println(sum(a,b,c)); // 두 번째 함수
System.out.println(sum(d,e)); // 세 번째 함수
}
}
|
cs |

2. 메소드 오버라이딩
메소드 오버라이딩은 객체지향의 핵심 중 하나인 '상속'의 중요한 개념 중 하나이다.
메소드 오버라이딩을 하기 위한 조건과 특징은 아래와 같다.
- 상속관계 이어야 한다.
- 인자의 개수, 타입 and 리턴타입 모두 같아야한다. (= method signature가 동일해야 함!)
- 부모 클래스에 있는 메서드의 기능을 재정의 하고 싶을 때 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package test;
class Animal{
String name;
int age;
Animal(String name){
this.name = name;
}
void show() {
System.out.println("이 동물의 이름은 " + this.name + "입니다.");
}
}
class Turtle extends Animal{
Turtle(String name, int age){
super(name);
this.age = age;
}
void show() { // 메소드 오버라이딩 --> 부모 클래스의 show() 함수를 재정의합니다.
System.out.println("이 거북이의 이름은 " + this.name + "이고 " + this.age + "살 입니다.");
}
}
public class Test2 {
public static void main(String[] args) {
Animal a = new Animal("꼬부기");
Turtle b = new Turtle("꼬부기", 120);
a.show();
b.show();
}
}
|
cs |