본문 바로가기
Programming/Java

5장. 상속 #3 오버라이딩

by jaegom 2020. 6. 12.

메소드 오버라이딩

1. 메소드 오버라이딩 : 슈퍼클래스의 메소드를 서브클래스에서 재정의 (메소드 덮어쓰기)

-슈퍼클래스의 메소드의 이름, 매개변수 타입 및 개수, 리턴 타입 등 모든 것을 동일하게 작성
-메소드 실행 시 서브클래스에서 재정의된 메소드가 무조건 실행된다. 서브클래스가 업캐스팅되고 슈퍼클래스의 메소드를 실행해도 이미 오버라이딩 된 메소드가 실행된다 -> 동적 바인딩이라고 부른다.

ex)

class Shape {
public void draw() {
System.out.println("Shape");
}
}

class Line extends Shape {
public void draw() {
System.out.println("Line")
}
}

class Circle extends Shape {
public void draw() {
System.out.println("Circle")
}
}

draw메소드가 오버라이딩 되어 실행시 동적바인딩이 발생하는 것을 확인할 수 있다.

2. 오버라이딩은 왜 쓰는가?

-슈퍼 클래스에 선언된 메소드를 각 서브 클래스들이 자신만의 내용으로 새로 구현 가능
ex) 사람은 밥을 먹는다라는 메소드가 있다. 사람의 서브클래스 박재식은 밥을먹는다==밥3공기이고 사람의 서브클래스 이인모는 밥을먹는다==밥1공기+매운거 안먹음 이다.
-하나의 이름(인터페이스)에서 서로 다른 내용을 구현하여 '다형성'을 실현

3. super : 슈퍼 클래스의 멤버를 접근할 때 사용되는 레퍼런스

  • 서브클래스에서만 사용
  • super()는 오버로딩 된 메소드를 찾을 때 사용하는 것. 이거와 다름
  • super는 정적 바인딩

cf) 동적, 정적 바인딩?

바인딩이란 변수와 변수에 관련된 속성을 연결시키는 것.
동적바인딩 : 프로그램 실행 시 바인딩이 일어남. 서브클래스의 메소드는 실행이 되야 오버라이딩 실현.
정적바인딩 : 컴파일 시 실현되는 것으로 그냥 변수에 값을 가시적으로 쓴 것. 기본적으로 내가 해온 것.

 

오버라이딩과 오버로딩 비교

댓글