"이것이 자바다" 정리7

2023. 2. 21. 19:29자바/이론 공부

이 게시글은 내가 "이것이 자바다" 책을 읽고 노트에 정리해놨던 내용들을 검색하기 쉽게 데이터로 백업하는 용도의 글이다.

 

문제가 된다면 삭제하겠음.

 

 

 

7장 상속

 

 

 

*부모 클래스 = 상위 클래스

자식 클래스 = 하위 클래스 = 파생클래스

 

 

*상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만듦 => 코드의 중복을 줄여줌.

 

 

*부모클래스의 private 접근제한의 필드와 메서드는 상속대상에서 제외

 

 

*상속 이용시 부모 클래스만 수정해도 모든 자식 클래스들이 수정되니 유지보수시간이 최소화.

 

 

*extends로 상속함.

다중 상속은 허용 x

 

 

*자식객체 생성시 부모객체 따로 생성안했어도 먼저 생성됨. (자식생성자에서 부모생성자를 부름)

 

 

*부모클래스의 메소드가 자식클래스가 사용하기에 적합하지않다면 자식클래스에서 메소드를 수정하면 됨 => 오버라이딩

 

 

*final 클래스 : 최종 클래스.

상속불가

 

 

*final 메소드 : 최종 메소드

오버라이딩 불가

 

 

*다형성 : 같은 타입이지만 실행결과가 다양한 객체를 이용할 수 있는 성질

 - 하나의 타입에 여러 객체 대입

 - 다형성을 이용하여 객체를 부품화 할 수 있음

 - 클래스 타입변환은 상속관계에 있는 클래스 사이에서 발생

 - 자식 타입은 부모타입으로 자동 타입변환

 

 

*

//이 둘이 참조하는 것은 같은 cat임.
Cat cat=new Cat();
Animal animal= cat;//Animal을 참조하는게 아님.

 

 

*부모타입으로 자동타입변환 후 부모클래스에 선언된 필드와 메소드만 접근가능

 - 변수는 자식객체를 참조하지만 변수로 접근 가능한 멤버는 부모 클래스 멤버로 한정

 - 만약, 메소드가 자식 클래스에서 오버라이딩되었다면 자식클래스의 메소드가 대신 호출

 

 

*다형성 : 동일한 타입을 사용하지만 다양한 결과가 나오는 성질

 - 주로 필드의 값을 다양화함으로써 실행 결과가 다르게 나오도록 구현

 - 실행 도중, 어떤 객체를 필드로 저장하느냐에 따라 실행결과가 달라짐 => 필드의 다형성

 

 

*필드의 다형성

 - 상속, 오버라이딩 후 다형성을 주게되면 코드를 고칠게 없어짐. but 결과는 달라짐. 굳이 메소드를 수정할 필요가 없음. 객체만 바꾸면 되는거임. (오버라이드한 메서드만 바꿔 사용가능. 필드는 원래꺼)

 

 

*매개변수의 다형성

 - 매개값으로 어떤 자식객체가 제공되느냐에 따라 메소드의 실행 결과는 다양해짐.

 

 

*강제타입변환

 - 부모타입은 자식타입으로 변환

 - 자식타입에 선언된 필드와 메소드를 꼭 사용해야 할 때 강제타입변환을 해서 다시 자식타입으로 변환한 다음 자식타입의 필드와 메소드를 사용하면 된다.

 

 

*추상클래스 abstract

 - 실체클래스(객체를 직접 생성하는)의 공통 필드와 메소드들을 추출해서 선언한 클래스. (추출해서 모아놓은 것이라 객체는 직접 생성 x.)

 - 추상클래스가 부모, 실체 클래스가 자식

 

 

*추상클래스의 용도

 1. 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적

    - 실체 클래스 설계자가 여러명일 경우를 위해

 2. 실체 클래스를 작성할 때 시간절약

 

 

*추상메소드

 - 추상클래스 설계시, 하위클래스가 반드시 실행내용을 채우도록 강요하고 싶은 메소드가 있을 경우, 해당 메소드를 추상메소드로 선언하면 된다.

 - 자식클래스는 반드시 추상메소드를 오버라이딩해야함.

 - 메소드 이름은 통일, 내용은 다르게 하고싶을 때.