오버로딩(Overloading) 정의 및 특징

1. 상속과 아무런 관련 없음

2. 메소드의 하는 일은 같지만 선언부는 달라야함

3. 메소드의 인자 타입, 인재 개수 중 적어도 하나가 달라야함

4. 하나의 메소드명으로 여러개의 메소드를 정의할 수 있음

5. 그로 인해 외부에서는 여러 타입의 데이터를 하나의 메소드로 처리할 수 있는것처럼 보임

public class OverloadingExam {
	public static void main(String[] args) {
		a(1);		// 디폴트 타입 int
		a(1l);		// 뒤에 l을 붙이면 long으로 들어감
		a(1.1);		// 디폴트 타입 double
		a(1.1f);	// 뒤에 f를 붙이면 float으로 들어감
	}

	public static void a(int a) {
		System.out.println("int");
	}

	public static void a(long a) {
		System.out.println("long");
	}

	public static void a(double a) {
		System.out.println("double");
	}

	public static void a(float a) {
		System.out.println("float");
	}

}
<<<결과값>>>
int
long
double
float

 

오버라이딩(Overriding) 정의 및 특징

1. 한마디로 메소드 재정의 --> 메소드의 기능이 바뀜 --> 새로운 메소드로 인식

2. 메소드의 선언부는 같지만 하는일이 달라짐

3. 메소드의 선언부(리턴타입, 메소드명, 인자값)는 반드시 일치해야함

4. 접근지정자는 상속받은 부모보다 범위가 같거나 넓어야함

5. 상속관계의 서로 다른 두 클래스 사이에서 발생함

6. 부모의 메소드를 물려받음 --> 물려받은 메소드를 자식이 고쳐씀

class Exam1{
	public void print(){
    	System.out.println("Exam1");
    }
}

class Exam2 extends Exam1{
	public void print(){
    	System.out.println("Exam2");
    }
}

public class OverridingExam {
	public static void main(String[] args) {
		Exam1 exam = new Exam2();
        	exam.print();
	}
}
<<<결과값>>>
Exam2

Exam2가 부모클래스인 Exam1의 print()를 오버라이딩 해서 자식클래스인 Exam2의 print()가 나옴

Posted by Jyoel :