오버로딩 (Overloading)

같은 메서드 이름을 사용하면서 파라미터의 수나 자료형을 달리하여 다양한 유형의 방식으로 사용할 수 있도록 하는 것

사용예시)

    // 기본 메서드
    void print(){
        System.out.println("매개변수 없음");
    }
    
    // 매개변수 int형이 2개인 메서드
    void print(int a, int b){
        System.out.println("매개변수 :"+a+", "+b);
    }
    
    // 매개변수 String형이 1개인 메서드
    void print(String s){
        System.out.println("매개변수 : "+ s);
    }

혼동주의)

    void print() {} // o
    void print(int a, int b) {} // o
    void print(double a, double b) // o
    void print(String s) {} // o
    int print(int a, int b, String s) // o 매개변수는 반드시 달라야하며 리턴타입은 상관없다.
    int print(String s, int a, int b) // o 매개변수의 위치가 달라도 오버로딩이다.

    // 리턴타입만 다른경우 오버로딩 x
    int print(int a, int b) // x (오버로딩이 아니다) 컴파일 에러
    boolean print(String s) // x (오버로딩이 아니다) 컴파일 에러




오버라이딩 (Overriding))

부모 클래스로부터 전달받은 메서드를 자식 클래스에서 내용을 재정의하여 사용 할 수 있도록 하는 것

  • 메서드의 이름과 리턴타입, 파라미터를 동일하게 가져가고 구현부를 재정의하여 사용해야한다.

사용예시)

class Fruit{ // 부모클래스
    public String ngame;
    public int price;
    
    //info 메서드
    public void info(){
        System.out.println("과일이름 : "+name+", 가격 : "+price);
    }
    
}
 
class Apple extends Fruit{ // 자식클래스(부모클래스 상속) 
    public int size;
    public int count;
    
    public void info() {// 메서드를 재정의 !!
        super.info();
        System.out.println("사과 크기 : "+size+", 갯수 : "+count);
    }
}
 
public class Test {
 
    public static void main(String[] args) {
        
        // 인스턴스 생성
        Apple apple = new Apple();
        
        // 객체의 변수 설정
        apple.name = "사과";
        apple.price = 30;
        apple.size = 20;
        apple.count = 5;

        //호출
        apple.info();        
        
    }
 
}

/**  console
    과일이름 : 사과, 가격 : 30
    사과 크기 : 20, 갯수 : 5 
**/