본문 바로가기

개발/Java

[Java] 자바 - 상속(Inheritance) / super / 오버라이딩(Overrding)

< 상속 >

 

- 매 클래스마다 중복된 코드들을 하나하나 기술하게 되면 수정과 유지보수가 번거로움

  중복된 필드, 메소드를 하나의 클래스(부모클래스)로 만들어서, 해당 클래스의 속성, 행위를 가져다 쓰는 형식 => 상속

- 기존의 클래스를 이용해서 새로운 클래스를 만드는 것

- 자식클래스 작성 시, 부모로부터 상속받은 부분은 기술하지 않음

  단, 메소드는 상속을 받아 재정의해서 사용 가능 (=> 오버라이딩과 연결되는 개념)

- 다형성과 연관된 개념

상속 해주는 클래스 상속 받는 클래스
부모클래스 자식클래스
조상클래스 후손클래스
상위클래스 하위클래스
슈퍼클래스 서브클래스
확장클래스 파생클래스

 

[ 표현법 ]

자식클래스이름 extends 부모클래스이름 (extends 예약어 사용)

 

[ 장점 ]

- 중복된 코드를 공통으로 관리 (새로운 코드 작성, 수리에 유리)

- 보다 적은 양의 코드로 새로운 클래스 생성 가능

=> 프로그램의 생산과 가독성, 유지보수에 기여

 

[ 특징 ]

- 클래스간 다중 상속 불가능 : 단일 상속 - 부모클래스가 단 하나

- 모든 클래스는 Object클래스의 후손 : 모든 클래스 - 내가 만든 클래스, 자바에서 이미 제공하는 클래스

  (클래스 뒤에 'extends Object '가 생략되어 있는 것)

   => Object클래스의 메소드 호출, 오버라이딩을 통한 재정의 가능

 

 

< super > 

 

- 해당 부모의 주소를 담고 있음

- super. : 직접접근 연산자를 통해 부모에 접근 가능

 

cf) this - 해당 객체의 주소값을 담고 있음

 

- 상속시, 자식클래스에서 'super.필드명' 으로 직접 접근은 불가능 (private 접근제한자 - 외부접근 제한)

- 해결 방법 3가지

1. 부모클래스 필드의 접근제한자 변경 : private → protected (=> 캡슐화 원칙에 위배)

2. 부모클래스의 setter메소드 호출 : super.set필드이름();

    ex) super.setName(name);

3. 부모생성자 호출하여 초기화 : 부모객체를 먼저 생성한 후, 자식객체 생성하는 순서. super(매개변수들);

 

 

< 오버라이딩 (Overriding) >

 

- 상속받고 있는 부모클래스의 메소드를 자식클래스에서 재정의(재작성) 하는 것

- 기능을 일부 고쳐서 사용하겠다는 의미

- 자식클래스에 오버라이딩 된 메소드가 우선권을 가지고 호출됨

 

[ 성립 조건 ]

1. 부모메소드의 메소드명과 동일

2. 매개변수의 자료형, 개수, 순서가 동일 (매개변수명과는 무관)

3. 반환형이 동일

(4. 부모메소드의 접근제한자와 같거나, 공유범위가 더 넓어야함)

 

[ @Override ]

- 어노테이션(annotation) : 일종의 주석, 코멘트

- 생략가능 : 명시하지 않아도 부모클래스의 메소드와 형태가 같으면 오버라이딩으로 판단

- 장점 : 실수를 줄일 수 있음(메소드명 일치하지 않으면 오류 발생), 바로 확인 가능