※chap6
상위 = 부모 = super 클래스
: 상위 클래스는 하위 클래스의 공통점만 추출하여 만든다.
하위 = 자식 = sub 클래스
: 상위 클래스보다 기능이나 필드가 많다.
상속 선언
: 하위 extends 상위 { }
: Eagle이 가진 기능: eat, sleep, fly
: Eagle이 this.eye 할 수는 없다.
: 내거는 this, 부모거는 super 사용
instance of : 자식이 맞는지 확인하는 키워드
메모리상에 자식 -> 부모 순서로 쌓인다.
부모 지칭 = super
자식 지칭 = this
: 인간은 영장류와 포유류의 기능이 들어있다.
Human h1 = new Human(); //인간 객체 생성
Primate h2 = new Human(); //업캐스팅
Mammal he = new Human()l //업캐스팅
@Override : 재정의
부모 메서드를 자식이 재정의한다.
부모 public -> 자식 private 가능 o
부모 private -> 자식 public 가능 x
부모가 좁게 지정한걸 자식이 넓게 펼칠수는 없다.!!
final, 정적 메서드는 더 이상 수정할 수 없는 최종이므로 오버라이딩 x
- 3
: 상속은 is-a 관계
: 다중 상속 = 부모 여럿
- 2
: private은 자식도 접근 불가
: final, static은 최종본이므로 수정 불가
- 오버라이딩
- super
: 멤버: 필드, 메서드
접근제어자: 정보은닉(importmation hiding)을 위해 사용한다.
public : 공공제. 패키지도 상관없이 아무데서나 사용 가능.
protected : 같은 패키지 내부에서 접근 가능. 상속 관계인 경우 다른 패키지에서도 사용 가능
default : 접근지정자를 생략시 자동 기본 설정. 동일 패키지 내에서만 사용 가능.
private : 동일 클래서에서 나만 쓸 수 있다.
get/set으로만 접근 가능하다.
- protected, public
- public
- import
작게(자식) -> 크게(부모) : 업캐스팅
: 자동형변환
반대는 강제형변환이므로 명시해야 한다.
담기는 통이 중요하다!!
※chap6 - ex3_instanceof / ex4_poplymorphism
※chap6 - mission
A클래스에 저장된 배열B를 C클래스에서 호출
A클래스에 public static으로 배열B 선언
C클래스 main에서 A클래스의 main 호출하기
: A클래스이름.main(args);
C클래스의 main에서 배열B 사용하기
: A클래스이름.배열B이름.add()...등등
- 2
: 자식은 부모를 품을 수 없다. 강제형변환하여 다운캐스팅 하면 가능하다.
- 3
:private
- 오류. apple, fox는 상관 x 클래스라서 형변환하지 않으면 test 클래스에서 fox 언급 시 오류.
- 1
: package 비슷 default
- Apple은 Fruit을 상속받았으므로 생성자를 만들면 자바가 super();하고 부모를 자동으로 부르는데, fruit에 기본 생성자가 없다.
: 자식 생성자에 fruit("빨강");
or 부모에 기본생성자 추가
- 부모가 가진 속성을 자식이 나열했다 ->오버라이딩(재정의) -> 주의점! : 부모가 지정한 접근제어 범위보다 넓게 펼칠 수 없다!!
-> name(default > public) 안된다.
& secret은 각자 정의한 비밀이므로 부모ㅡ자식 서로 상관없는 필드
name, number
: static 선언하면 person이 공유하는 show가 있고, student가 공유하는 weight, show가 각자 생긴다.