Backend/Java
overloading vs overriding 차이 오버로딩 vs 오버라이딩 차이
개발하는루루
2022. 10. 31. 20:35
1. 오버로딩
- 같은 이름의 메서드(함수)를 여러개 가지면서 매개변수 유형과 개수가 다르도록 하는 것
class TestOverloading {
//매개변수가 없는 sol 메서드
void sol() {
System.out.println("매개변수가 없습니다");
}
//매개변수가 int형 2개인 sol 메서드
void sol(int a, int b) {
System.out.println("매개변수" + a + "와" + b);
}
//매개변수가 String형 1개인 sol 메서드
void sol(String c) {
System.out.println("매개변수" + c);
}
}
public class TestOverLoad {
public static void main(String[] args) {
TestOverloading ob = new TestOverloading();
ob.sol();
ob.sol(1,2);
ob.sol("오버로딩 테스트");
}
}
출력물 :
"매개변수가 없습니다"
"매개변수1와2"
"매개변수오버로딩테스트"
2. 오버라이딩
- 상위 클래스가 가지고 있는 메서드도 하위 클래스로 상속되어 하위 클래스에 사용
- 하위 클래스에서 메서드를 재정의해서 사용할 수 있음
- 쉽게 말해 메서드 이름이 같고, 매개변수가 같고, 반환형이 같을 경우 상속받은 메서드를 덮어쓴다고 생각하면 됨
- '부모 클래스의 메서드는 무시하고, 자식 클래스의 메서드 기능을 사용하겠다' 와 같음
//부모 클래스
class Woman {
public String name;
public int age;
public void info() {
System.out.println("여자 이름은 "+name+", 나이는 "+age+"살");
}
}
// Woman 클래스 상속받은 Job 클래스
class Job extends Woman {
String job;
// 부모 클래스(Woman)에 있는 info 메서드 재정의
public void info() {
System.out.println("여자의 직업은 "+job+"입니다.");
}
}
public class TestOverRide {
public static void main(String[] args) {
//Job 객체 생성
Job job = new Job();
//변수 설정
job.name = "솔이";
job.age = 26;
job.job = "개발자";
//호출
job.info();
}
}
출력물 :
"여자의 직업은 개발자입니다."
오버로딩 | 오버라이딩 | |
메서드 이름 | 동일 | 동일 |
매개변수, 타입 | 다름 | 동일 |
리턴 타입 | 상관없음 | 동일 |