본문 바로가기

Study/Java

[Java] 오버라이딩

오버라이딩

자바 질문 중에 단골로 나오는 오버로딩과 오버라이딩.. 오버라이딩은 저번에 공부를 했으니 오버라이딩을 공부해보았다. 기억하기 쉽게 오버로딩과 오버라이딩의 차이도 적어놨다. 그리고 상속에서 다루지 못한 super가 책에 함께 언급되어 같이 적어보았다. 이 두 개밖에 없어서 오늘의 공부 필기는 다른 포스팅에 비해 분량이 적을 것 같다.

오버라이딩은 상속받은 메소드의 내용을 변경하는 것이다. 부모 클래스에 존재하던 메소드가 현재 클래스에 맞지 않는 경우 재정의가 가능하다. 오버라이딩은 메소드의 내용만 새로 작성하는 것으로 조건이 몇 가지 존재하는데,

  1. 선언부(이름, 매개변수, 리턴 타입)가 같아야 한다.
  2. 접근 제어자(public, private 등)를 좁은 범위로 변경할 수 없다.
  3. 메소드의 인스턴스와 static 변환이 불가능하다.

오버로딩 VS 오버라이딩

  • 오버로딩: 이름이 같지만 매개변수를 달리하여 함수를 새로 정의하는 것
  • 오버라이딩: 함수의 내용을 자체를 재정의하는 것 (덮어 씌우는 느낌이다!)

super

조상 클래스로부터 상속받은 멤버를 참조할 때 사용하는 참조 변수이다. 상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때는 super를 통해 구별이 가능하다. 

class Main {

  public static void main(String args[]) {

      Child c = new Child();
      c.method();
  }
  
}

class Parent {

	int x = 10;
    
}

class Child extends Parent {

	int x = 20; // 조상인 Parent가 가진 멤버 변수 x와 이름이 같다!
	void method() {
		System.out.println(this.x); // 20
		System.out.println(super.x); // 10
	}
    
}
뜬금없지만 티스토리 코드 블록 너무 따닥따닥 붙어있다..ㅠ 스페이스바는 또 너무 넓고,, 스킨 편집으로도 안되고,,, 방법 아는 분 계시면 알려주세요..

super()

this()와 마찬가지로 생성자 역할을 하며, super()은 조상 클래스의 생성자를 호출하는 데 사용한다. 조상 클래스의 멤버 변수를 초기화할 때는 조상의 생성자를 통해 초기화해야 하므로 무조건 super()를 사용해야 한다.

  • 무조건 첫 줄에 삽입해야 하는 것을 잊지 말자!

'Study > Java' 카테고리의 다른 글

[Java] 자바의 제어자  (0) 2020.03.12
[Java] 패키지와 import  (0) 2020.03.12
[Java] 자바의 상속  (0) 2020.03.12
[Java] 변수의 초기화  (0) 2020.03.10