카테고리 없음

오버로딩 VS 오버라이딩

JUN0126 2021. 7. 3. 01:11

오버로딩 (Overloading)

 - 같은 메소드 이름을 사용하더라도 매개변수만 다르면 사용할 수 있는 기능

 - 호출 매개변수에 따라 해당하는 메서드를 실행시킨다

 

EX) void print() { System.out.print("프린트") }  

     void print(String name) { System.out.print("프린트" + name) } 가능

     String print(String name) { System.out.print("프린트" + name) } // 위와 메소드 명 및 파라미터가 일치함으로 불가능

     String print(String name, int age) {{ System.out.print("프린트" + name) + age }}  가능

 

 

오버라이딩 (Overriding)

 - 상속 관계에 있는 클래스 간에 같은 이름의 메소드를 정의하는 기능

 - 오버라이드 하고자 하는 메소드가 상위 클래스에 존재해야 한다.

 - 메소드 파라미터 개수, 파라미터 자료형이 같아야 한다.

 - 메소드 리턴형이 같아야 한다.

 - 상위 메소드와 동일하거나 내용이 추가 되어야 한다.

 - 접근 제한을 더 강하게 오버라이딩 할 수 없다 EX) 부모가 public 접근 제한을 가지고 있을 경우 오버라이딩 하는 자식 메소드는 default 나 private 접근 제한으로 수정 할 수 없다.

 

EX) 

public class Move {

private int count = 0;

public void go() {
System.out.println("Move GO : " + ++this.count);
     }
}

 

---------------------------------------------------------------------------------------------

public class Car extends Move{

private String name;

public Car(String name) {
this.name = name;
    }

@Override
public void go() {
System.out.println("Car go : "+ this.name);
    }

public static void main(String[] args) {
Move move = new Move();
move.go();  // Move GO : 1

Car car = new Car("BMW");
car.go(); // Car go : lee

    }
}