[Java] 메소드 오버라이딩

YoungMinKim·2020년 11월 8일
0
post-thumbnail

상속을 위한 두 CLASS의 관계

상속

  • extends를 사용해 무작정 상속을 하는 것은 좋은 관례가 아니다.
  • 자바는 현실 세계를 모델링 하여 코드로 옮길 수 있도록 구성이 되 있다.

상속의 특성

  • 하위 Class는 상위 Class의 모든 특성(변수, Method)을 지닌다.
  • 거기에 더하여 하위 Class는 자신만의 추가적인 특성을 더하게 된다.
  • 상위 Class가 가지고 있는 특성을 하위 Class가 적용 할 수 있다.
  • 상속 관계에 있는 Class 대상은 IS-A 관계를 가져야 한다. (사과 is a 과일)
  • IS-A 관계라 해서 무조건 상속이 성립이 되는 것은 아니다.

Method Overriding

Method Overriding [포함된 것이 포함 시킨 것을 가르킬 수 있다]

  • 부모 : 자식 관계로 이루어진 클래스 사이에서 부모 Class의 Method를 재정의 하여 사용할 때 정의되는
    기술로써, 부모 Class가 소유한 Method의 이름, 반환 타입, 매개변수가 같은 경우에만 사용할 수 있는 기술.

  • 객체 지향 언어에 있어 가장 중요한 개념 중 하나이다. 또한 추상화, 다형성, 캡슐화, 상속의 특성을 갖는다. (Overriding은 다형성 에서 사용이 되는 개념)

Method Overriding 02

  • 포함된 것이 포함 시킨 것을 가르킬 수 있다.
    → 부모 클래스의 참조 변수로 자식 클래스의 Instance를 참조 할 수 있다.
    → 자식 클래스의 참조 변수로 부모 클래스의 Instance를 참조 할 수 없다. [DownCasting 필요]

참조 변수의 참조 가능성에 대한 정리

참조 변수의 참조 가능성

  • 중요한 점은 부모 클래스의 참조 변수로 자식 클래스의 Instance를 왜 참조 하는가??
  • 컴파일러는 문장 단위로 모든 것을 기억한다. (DownCasting 관련)
  • 상속 관계로 이루어진 두 Class는 배열 참조 변수를 통해 참조가 가능하다. (번외)
  • 부모 클래스의 참조 변수를 통해 자식 클래스의 Instance를 참조 하게 되는 경우 기존 방식에서는
    자식 클래스의 Method에 접근 할 수 없지만, Overriding을 통해 접근이 가능하기에 사용을 한다.

Method Overriding

Method Overriding

  • 반환 형, Method 이름, 매개변수 선언이 동일할 시 Overriding 관계가 성립 된다.
  • 외부에서 참조 변수.Method()로 Overriding된 Method를 호출 할 수 없다.
  • super.Method()를 통해 Overriding된 Method를 호출 할 수 있다.

Example
1. Cake c1 = new CheeseCake() 선언.
2. c1.yummy();
3. Overriding을 통해 구현 된 c1 참조 변수는 자식 Class의 yummy Method()를 호출한다.

Class Cake {
	public void yummy(){...}
}
Class CheeseCake extends Cake {
	public void yummy(){...}	
}
Class StrawBerryCheeseCake extends CheeseCake {
	public void yummy(){...}
}

public static void main(String[] args){
	Cake c1 = new StrawBerryCheeseCake();
	CheeseCake c2 = new StrawBerryCheeseCake();
	StrawBerryCheeseCake c3 = new StrawBerryCheeseCake();
	c1.yummy();
	c2.yummy(); 
}

InstanceOf 연산자

InstanceOf [true, false]

//cake가 참조하는 그 인스턴스 Cake 참조변수로 참조 가능해?
if(cake instanceof Cake){...}
//cake가 참조하는 그 인스턴스 CheeseCake 참조변수로 참조 가능해?
if(cake instanceof CheeseCake){...}
//cake가 참조하는 그 인스턴스 StrawberryCheeseCake 참조변수로 참조 가능해?
if(cake instanceof StrawberryCheeseCake){...} 

좋은 예제 (Method Overriding)

실습 예제

상속이 도움 되는 상황

프로그램을 구축하는 과정
1. 안정성
2. 확장성

  • 클라이언트의 요청에 따라 프로그램을 유연하게 변경 하기 위해 확장성은 중요하다.
  • 상속을 통해 공통된 부분을 하나로 묶어 프로그램을 유연하게 적용한다.

Object 클래스, final선언

Object

  • 모든 클래스, Object 클래스를 상속한다.
  • 상속하는 클래스가 없을 시 컴파일러에 의해 Object 클래스를 상속하게 코드가 구성된다.
  • toString()는 Object Class에 정의 되 있는 toString()을 **Overriding해 사용한 것이다.

클래스, Method final 선언

Class
public final class MylastCLS(){...}

  • class에 final 선언을 하면 다른 클래스에서 상속 할 수 없다.

Method
public final void func(){...}

  • Method에 final 선언을 하면 Overriding이 불가능하다.
profile
https://ym1085.github.io

0개의 댓글