본문 바로가기

Archived(CSE Programming)/Java

Java 오버로딩과 오버라이딩

Java에서 다형성(Polymorphism)을 지원하기 위한 대표적인 두 가지 방식인 오버로딩(Overloading)과 오버라이딩(Overriding). 비슷한 단어 때문에 헷갈려하곤 한다.

1. 오버로딩

오버로딩이란 특정 메소드를 같은 이름으로 매개변수 타입(자료형, 개수)만 다르게 하여 구성하는 것을 말한다.

참고로 반환형은 상관없다.

이러한 오버로딩은 생성자에도 적용되어 생성자 오버로딩도 가능하다(하나의 메소드로 볼 수 있기에).

class Test{
	public void method(void){
    	System.out.println("void 매개변수 메소드");
    }
    public void method(int v1){
    	System.out.println(v1+ " int형 1개 매개변수 메소드");
    }
    public void method(int v1, int v2){
    	System.out.println(v1 + " " + v2 + " int형 2개 매개변수 메소드");
    }
    public void method(float v1){
    	System.out.println(v1+ " float형 1개 매개변수 메소드");
    }
    public void method(float  v1, float v2){
    	System.out.println(v1 + " " + v2 + " float형 2개 매개변수 메소드");
    }
    
    public static void main(String[] args){
    	Test test = new Test();
        test.method();
        test.method(1);
        test.method(1,2);
        test.method(1.5);
        test.method(1.3, 2.6);      
    }
}

2. 오버라이딩

오버라이딩이란 상위 클래스의 메소드와 하위 클래스의 메소드 이름이 같을 경우 하위 클래스의 메소드를 재정의하여 사용할 수 있는 것을 말한다. 함수 이름, 매개변수, 반환형이 같아야 한다. 그리고 static 함수는 오버라이딩이 불가하다.

class Human{
	int age;
   	public Human(int a){
    	age = a;
    }
	void print(){
    	System.out.println("나이는 "+age+"살 입니다");
    }
}
 
class Student extends Human{
	int grade;
   	public Student(int a, int g){
    	super(a); // 부모 생성자 호출
        grade = g;
    }
    // 메소드 오버라이딩
	void print(){
    	super.print();
    	System.out.println("학년은 "+grade+"입니다");
    }
}
 
class test{
	public static void main(String[] args){
    	Human h = new Human(10);
        Human h2 = new Student(10, 3);
        h.print();
        h2.print();
    }
}
메소드 오버로딩 오버라이딩
이름 동일 동일
매개변수 다름 동일
반환형 상관없음 동일

오버로딩의 장점 : 같은 이름으로 메소드를 여러 번 정의하여 유지보수가 용이하게 한다.

오버라이딩의 장점 : 하나의 코드로 여러 객체를 핸들링할 수 있다. 

 

'Archived(CSE Programming) > Java' 카테고리의 다른 글

Java 컬렉션(Collection)  (0) 2019.11.03
Java 추상클래스, 인터페이스  (0) 2019.11.03
Java 멤버 변수, 접근제어자  (0) 2019.11.02
Java 언어의 특징  (0) 2019.11.02
Java 자료형  (0) 2019.10.31