최코딩의 개발

열 네번째, 상속에 관해 본문

JAVA

열 네번째, 상속에 관해

seung_ho_choi.s 2023. 5. 31. 15:23
728x90

개요: 필자가 시험공부를 하면서 정리한 게시물이다!! 오랜만에 자바!! 

 

상속

- 부모가 자식에게 물려주는 행위를 말한다. 즉 부모 클래스의 필드와 메소드를 자식클래스에게 물려줄 수 있다. 

- 또한 중복되는 코드를 줄여주는 개발을 단축시키기 위해 사용한다. 

- 다중 상속을 허용하지 않는다.

- 키워드는 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{} - 자식을 만들거다.

 

 

728x90