Chapter 7 상속과 다형성
3. 상속과 생성자
1)super()
what?
부모 클래스의 기본 생성자를 호출하는 코드
why?
자식 클래스의 생성자에는 반드시 부모 클래스의 생성자를 호출하는 코드가 있어야 한다.
how?
자식 클래스 생성자에 부모 클래스를 따로 작성하지 않는다면, 컴파일러가 자동으로 자식 클래스 첫줄에 super();를 추가한다.
*자식 클래스에서 자동으로 super();가 작성되었는데 부모 생성자에 기본 생성자가 없으면 오류가 생길 수 있다. 부모 생성자에 기본 생성자를 작성하는 습관을 들이도록 한다.
2)Object 클래스
what?
모든 클래스의 조상인 클래스
why?
Object 클래스에 있는 메서드를 사용하기 위해서…?
how?
아무 상속도 받지 않는 클래스를 만들 경우 컴파일러가 자동으로 Object 클래스를 만든다.
4. Package와 import
1)Package
what?
클래스를 묶어서 분리해놓은 집합, 디렉터리
why?
관리를 편리하게 하기 위해
2)import
what?
다른 패키지에 있는 클래스를 사용할 때 사용하는 구문
why?
일일히 패키지.클래스 참조변수 = new 패키지.클래스를 입력하지 않을 수 있다.
how?
클래스 밖에 import 패키지. 클래스;
또는 import가 필요한 경우 오류 메시지를 클릭하면 자동으로 import를 만들어준다.
5. 제어자
1)접근 제어자
what?
외부에서 접근할 수 있는 정도와 범위를 정하는 제어자
why?
데이터 안정성…?
how?
public: 접근 제한 x
protected: 같은 패키지 내와 자손 클래스에서 접근
default: 같은 패키지 내에서만 접근
private: 같은 클래스 내에서만 접근
+getter, setter
what?
접근이 제한된 멤버에 우회적으로 접근하는 메서드
why?
데이터의 안정성 확보
how?
우클릭>source>generate getter/setter
2)static
3)final
final 변수: 값을 더 이상 변경할 수 없는 상수
final 메서드: 내용을 더 이상 변경할 수 없는 메서드(오버라이딩 x)
final 클래스: 내용을 더 이상 변경할 수 없는 클래스(상속 x)
6. 다형성
what?
한 타입이 여러 형태의 인스턴스를 가질 수 있는 것
why?
여러 클래스가 연결되어있을 때 클래스의 멤버 변경을 효율적으로 하기 위함
how?
부모클래스의 참조변수에 자식클래스도 담을 수 있다.
사자에게 먹이를 주는 코드.
토끼가 더해졌다. 이때 토끼에게 먹이를 주기 위해서는 zookeeper 클래스에 토끼에 함수를 하나 더 만들어야 한다.
이러한 상황에서 다형성을 이용할 수 있다.
zookeeper 클래스의 함수를 하나로 만들었다. 동물 클래스가 더 추가되어도 함수 하나로 대응할 수 있다.
james.feed에 lion1을 입력해서 실행했을 때의 흐름을 그림으로 표현했다.
Chapter 8 추상 클래스와 인터페이스, 내부 클래스
1. 추상 메서드와 추상 클래스
what?
추상 메서드: 선언부만 만들어두어 메서드의 양식을 정해놓은 메서드
추상 클래스: 추상 메서드를 가진 클래스
why?
협업 시 편리한 조율을 위함
how?
abstract 메서드(); //선언부만 만들기 때문에 중괄호 없음
abstract class 클래스명{}
상속받은 자손 클래스는 반드시 추상 메서드를 구체적으로 정의해야 한다.
2. 인터페이스
what?
상호작용을 하기 위한 매개, 설계에 필요한 목록을 써놓은 종이.
why?
how?
interface 인터페이스이름
{
public static final 타입 이름 = 값;
public abstract 반환타입 메서드이름(매개변수);
}
class 클래스이름 implements 인터페이스이름
{
}
오버라이딩시 부모의 접근제어자보다 넓거나 같은 범위의 제어자를 사용해야 한다. 보통 public을 사용한다.
'정리노트' 카테고리의 다른 글
[java] API (0) | 2023.10.25 |
---|---|
[java] 내부 클래스, 예외 처리 (0) | 2023.10.24 |
[java]클래스와 인스턴스, 상속 (0) | 2023.10.20 |
[java]클래스, this (0) | 2023.10.19 |
[java] 변수 재정리, 객체지향 (0) | 2023.10.18 |