[Java] 오버로딩과 오버라이딩 차이와 예제

오솔·2022년 3월 29일
0

Java

목록 보기
1/1
post-thumbnail

오버로딩(Overloading)

  • 같은 이름의 메서드(함수)를 여러개 가지면서 매개변수 유형과 개수가 다르도록 하는 것

예제)

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("오버로딩 테스트");
    }
}

이와 같이 sol 메서드가 3개지만, 매개변수 유형과 개수가 다름

호출 매개변수에 따라 맞는 함수를 실행함


오버라이딩(Overriding)

  • 상위 클래스가 가지고 있는 메서드도 하위 클래스로 상속되어 하위 클래스에 사용
  • 하위 클래스에서 메서드를 재정의해서 사용할 수 있음
  • 쉽게 말해 메서드 이름이 같고, 매개변수가 같고, 반환형이 같을 경우 상속받은 메서드를 덮어쓴다고 생각하면 됨
  • '부모 클래스의 메서드는 무시하고, 자식 클래스의 메서드 기능을 사용하겠다' 와 같음

예제)

//부모 클래스
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();
        
    }  
}

결과는 "여자의 직업은 개발자입니다."가 출력된다.

Job(자식클래스)에서 Woman(부모클래스)를 상속받아 부모클래스의 info를 재정의 하였고,
메인메서드에서 Job 객체를 생성하고 호출하였기 때문에 Job 클래스 내용이 실행됨


오버로딩과 오버라이딩 성립조건

구분오버로딩오버라이딩
메서드 이름동일동일
매개변수, 타입다름동일
리턴 타입상관없음동일



참고: https://private.tistory.com/25

profile
지극히 개인적인 내 개발스터디 공간

0개의 댓글