관리 메뉴

HeeJ's

[03] 메서드 오버로딩, 메서드 오버라이딩 :: Java 본문

<Programming>/<JAVA>

[03] 메서드 오버로딩, 메서드 오버라이딩 :: Java

meow00 2020. 6. 12. 00:19

메서드 오버로딩

: 메서드 이름은 같지만 메서드 시그니처가 다른 메서드를 정의하는 것

 

* 메서드 시그니처

: 메서드 이름과 매개변수의 개수, 데이터 타입, 순서 를 의미

 

 

- 메서드의 이름이 같아야한다

- 메서드의 매개변수의 개수 혹은 타입이 달라야 한다.

 

ex :

...

public static int max(int n1, int n2){
	int result = n1 > n2 ? n1 : n2;
    return result;
}

public static double max(double n1, double n2){
	double result = n1 > n2 ? n1 : n2;
    return result;
}

public static int max(int n1, int n2, int n3){
	return max(max(n1,n2),n3);
}

 

매개변수의 데이터 타입, 데이터 개수가 다르고 이름은 같이 사용할 수 있다.

 

사용할 때, 매개변수를 보고 그에 맞는 메서드가 호출된다.

 

 


메서드 오버라이딩

: 물려받은 메서드를 자식 클래스에게 맞도록 수정하는 것

(상속 관계에서만 나타남)

 

 

- 부모 클래스의 메서드와 동일한 시그니처를 사용한다.

- 부모 클래스의 메서드보다 접근 지정자가 좁아질 순 없다. 넓어질 수는 있음

- 부모 클래스의 메서드보다 추가적인 exception을 나타낼 수 없다.

- interface를 구현해서 메서드를 오버라이딩 할 때는 반드시 접근 지정자를 public으로 해야한다.

- private 메서드는 상속 자체가 되지 않는다.

- static(정적) 메서드는 클래스 소속이기 때문에 상속되지 않는다

- final 예약어가 지정된 메서드는 더이상 수정할 수 없으므로 오버라이딩할 수 없다.

 

 

[Source] - [Override/implement Methods...]

오버라이딩할 메서드 V하기

 

ex:

 

부모 클래스:

public class Circle{
	...
    public void area(){
    	System.out.println("원의 넓이");
    }
}

자식 클래스:

public class Ball{
	...
    @Override
    public void area(){
    	System.out.println("구의 넓이");
    }
}

라고 했을 때,

public class inheritance{
	public static void main(String[] args){
    	Circle c1 = new Circle();
        Ball c2 = new Ball();
        
        c1.area();
        c2.area();
     }
 }

를 출력한다면,

 

오버라이딩 전:

원의 넓이

원의 넓이

 

오버라이딩 후:

원의 넓이

구의 넓이

 

super 키워드:

부모 키워드의 오버라이딩 된 메서드를 사용할 때

 

ex:

 

자식 클래스:

public class Ball{
	...
    @Override
    public void area(){
    	super.area();
    	System.out.println("구의 넓이");
    }
}

 

이를 실행해보면:

원의 넓이 //부모 클래스의 메서드 실행

구의 넓이

 

가 출력된다.

반응형

'<Programming> > <JAVA>' 카테고리의 다른 글

[04] Generic :: Java  (0) 2020.06.24
[02] 상수, 데이터 입력 :: Java  (0) 2020.06.11
[01] Package Explorer :: Java  (0) 2020.06.11