최코딩의 개발
열 네번째, 상속에 관해 본문
개요: 필자가 시험공부를 하면서 정리한 게시물이다!! 오랜만에 자바!!
상속
- 부모가 자식에게 물려주는 행위를 말한다. 즉 부모 클래스의 필드와 메소드를 자식클래스에게 물려줄 수 있다.
- 또한 중복되는 코드를 줄여주는 개발을 단축시키기 위해 사용한다.
- 다중 상속을 허용하지 않는다.
- 키워드는 extends이다.
- 자식 객체를 생성하면 부모 객체가 먼저 생성된 다음 자식 객체가 생성된다.
(부모 생성자는 자식 생성자의 맨 첫 줄에 숨격져 있는 super()에 의해 호출된다. 이것은
컴파일러에 의해 자동 호출이 되며 부모 클래스에 기본 생성자가 없고 매개변수를 갖는 생성자면
super 코드를 직접 매개변수해서 넣어야 된다. ) - 291page
메소드 오버라이딩
- 상속된 메소드를 자식 클래스에서 재정의하는 것을 말한다.
- 메소드가 오버라이딩되었다면 해당 부모 메소드는 숨겨지고 자식 메소드가 우선적으로 사용된다. (294 page)
- 특징은 다음과 같다.
1. 부모 메소드의 선언부(리턴 타입, 메소드 이름, 매개 변수)와 동일해야 한다.
2. 접근 제한을 더 강하게 오버라이딩 할 수 없다.
3. 새로운 예외를 throws 할 수 없다.
- 부모 메소드의 일부를 변경하더라도 자식 메소드는 부모 메소드와 중복된 내용을 가지고 있어야 된다.
하지만 코드가 길어질 경우 복잡하다. 그럴때 super 키워드와 도트(.) 연산자를 사용하여 숨겨진 부모 메소드를 호출할 수 있다.(297page)
final, protected
- class, 메소드 앞에 final이 붙이면 더 이상 수정할 수 없으므로 상속이 안된다.
- protected 접근 제한자는 default 처럼 접근이 가능하나 다른 패키지에서는 자식 클래스만 접근을 허용한다.
자동타입변환
- 이것은 의미대로 자동적으로 타입 변환이 일어나는 것을 말한다.
(부모타입 변수= 자식타입객체;)
Animal animal=new Cat;
즉 cat 객체는 animal이 부모이므로 animal 클래스에서 선언된 필드와 메소드만 접근이 가능하다.
또한 자식 클래스에서 오버라이딩된 메소드가 있다면 부모메소드 대신 오버라이딩 된 메소드를 호출한다.(309 page)
강제타입변환
- 캐스팅 연산자로 부모타입을 강제로 자식 타입으로 변경하는것이다.
- 자식 객체가 부모 타입으로 자동 변환된 후 다시 자식 타입으로 변환할 때 강제 타입 변환을 사용할 수 있다.
다형성
- 사용 방법은 도일하지만 실행 결과가 다양하게 나오는 성질을 말한다.
필드 다형성(316page)
매개변수 다형성(318page)
책을 통해 직접 코드를 보는게 나을거 같다.
추상클래스
- 실체 간에 공통되는 특성을 추출한 것을 말한다.
(새, 곤충, 물고기 등의 공통점은 동물이다. 이때 동물이 실체들의 공통되는 특성!!)
- 객체를 생성할 수 있는 클래스를 실체 클래스라고 하며 이 클래스들의 공통적인 필드나 메소드를 추출해서
선언한 클래스를 추상 클래스라고 하며 이때 추상클래스가 실체클래스이 부모가 된다.
- new 연산자를 사용해서 객체를 직접 생성할 수 없다.
- abstract를 사용한다.
- 상속받은 자식클래스는 부모클래스의 메소드를 사용할 수 있다.(326pge)
- 추상 메소드 선언은 public abstract 타입 이름(); 이렇게 작성하면된다. {} 생략!
봉인된 클래스
- 무분별한 자식 클래스 생성을 방지하기 위해 봉인된 클래스가 도입되었다.
(puvlic sealed class Person permits Employee, Manager{})
이때 저 Employee, Manager 를 클래스 만들때
public final class Employee extends Person{} - 더 이상 자식을 만들 수 없다.
public non-sealed class Manger extends Person{} - 자식을 만들거다.
'JAVA' 카테고리의 다른 글
열 여섯번째, 내부 클래스 (0) | 2023.06.06 |
---|---|
열 다섯번째, 인터페이스 (0) | 2023.05.31 |
열 세번째, static에 관해 (0) | 2023.03.30 |
열 두번째, Priority Queue(우선순위 큐) (0) | 2023.03.02 |
열 한번째, List 인터페이스 정리 (2) | 2023.03.02 |