11. 상속

zza·2023년 9월 19일
0

Java

목록 보기
11/19

상속

※chap6

  • 코드의 중복을 줄이고 재사용성을 높이기 위해 사용한다.
    -> 개발 시간 단축, 코드 수정 최소화

  • 빈 화살표로 이어져 있다.

  • 상위 = 부모 = super 클래스
    : 상위 클래스는 하위 클래스의 공통점만 추출하여 만든다.

  • 하위 = 자식 = sub 클래스
    : 상위 클래스보다 기능이나 필드가 많다.

  • 상속 선언
    : 하위 extends 상위 { }

  • 엄마가 준 건물은 낡았어. 내 맘대로 리모델링 할거야~

  • 부모는 하나만 존재한다.
  • 이 건물은 받았어 엄마한텡ㅎ


  • is- a 가 가능하면 상속 가능하다.


: Eagle이 가진 기능: eat, sleep, fly
: Eagle이 this.eye 할 수는 없다.
: 내거는 this, 부모거는 super 사용

현실 적용

  • 접근지정자
    - public : 공공제
    - protected : 나와 자식클래스만 사용 가능
    - private : 나만 쓸 수 있다.

this/super 키워드

형 변환

instance of : 자식이 맞는지 확인하는 키워드

  • 메모리상에 자식 -> 부모 순서로 쌓인다.

  • 부모 지칭 = super

  • 자식 지칭 = this

여러 단계 상속


: 인간은 영장류와 포유류의 기능이 들어있다.

Human h1 = new Human();	//인간 객체 생성
Primate h2 = new Human(); //업캐스팅
Mammal he = new Human()l //업캐스팅
  • 배열, arrayList
    : 여러개의 값을 저장할 수 있다.
    : 지정된 하나의 자료형의 묶음만 저장 가능하다.

-> 여러 자료형을 넣고 싶을 때는??

  • ★상속을 이용하여 Mammal[ ] 안에 Primate와 Human을 넣으면
    다른 자료형도 넣을 수 있다.??????

메서드 오버라이딩

  • @Override : 재정의

  • 부모 메서드를 자식이 재정의한다.

  • 부모 public -> 자식 private 가능 o

  • 부모 private -> 자식 public 가능 x

  • 부모가 좁게 지정한걸 자식이 넓게 펼칠수는 없다.!!

  • final, 정적 메서드는 더 이상 수정할 수 없는 최종이므로 오버라이딩 x

(cf)오버로딩

  • 이름이 같은 메소드를 여러개 만드는 것.
  • 단, 메서드 시그니처(매개변수의 개수, 자료형)가 달라야 한다.
  • 반환타입은 시그니처 아니다!

Annotation

  • 주석
  • 컴파일러에게 제공하는 정보

  • 자식이 재정의하면 자식은 부모 클래스의 기존 메서드는 숨긴다.
    ->호출 시, 재정의 된 메서드가 우선 호출된다.

★오버라이딩과 오버로드 구분

  • 자주 등장하는 면접 질문

메모리

  • 메서드는 기능만 실행하면 없어지므로,
    -> 메서드 호출 시, 그 메소드를 참조한다.

문제

  1. 3
    : 상속은 is-a 관계
    : 다중 상속 = 부모 여럿
  1. 2
    : private은 자식도 접근 불가
    : final, static은 최종본이므로 수정 불가
  1. 오버라이딩
  1. super
    : 멤버: 필드, 메서드

패키지

  • 폴더와 유사한 개념
  • 패키지 내부에서만 중복되지 않으면 같은 이름의 클래스 사용 가능하다.

import문

  • scanner 만들때.
    -내가 만든 대른 패키치 호출도 가능.

자식 클래스와 부모 생성자

  • super() 자동 호출
  • 보모 호출이 최상단에 있어야 한다.
    public ColoredBox( ) { 여기 안에! }
  • 생성자 오버로딩시, 기본생성자 생성은 관례.

접근제어

  • 접근제어자: 정보은닉(importmation hiding)을 위해 사용한다.

  • public : 공공제. 패키지도 상관없이 아무데서나 사용 가능.

  • protected : 같은 패키지 내부에서 접근 가능. 상속 관계인 경우 다른 패키지에서도 사용 가능

  • default : 접근지정자를 생략시 자동 기본 설정. 동일 패키지 내에서만 사용 가능.

  • private : 동일 클래서에서 나만 쓸 수 있다.
    get/set으로만 접근 가능하다.

문제

  1. protected, public
  1. public
  1. import

final클래스와 메서드

  • fianl은 변경 불가 -> 상속도 불가

타입 변환과 다형성

  • 작게(자식) -> 크게(부모) : 업캐스팅
    : 자동형변환

  • 반대는 강제형변환이므로 명시해야 한다.

  • 담기는 통이 중요하다!!

  • 통: Person p
  • 내용: Student s

  • 통: Student s
  • 내용: Person p

instance of 연산자

  • 객체 타입 확인 연산자

- a instance of b : a가 b에 포함되어 있니?

  • 강제형변환은 오류 가능성이 있으므로 조건이 필요하다.

다형성

※chap6 - ex3_instanceof / ex4_poplymorphism

  • 상속받은 클래스들(자식)이 부모의 기능을 다르게 쓰는 것
  • 다형성은 오버라이딩으로 구현할 수 있다.

  • 자식a <- 부모 <- 자식a
    : 같은 자식이어야 한다.
    : 부모는 자식 a/b/c 누가 들어오든 상관없이 자식의 기능을 표현해주지만, 자식a는 타인(자식b)를 표현하지 않는다.(여기에 형제자매따위는 없다)

정리

+ main에서 객체 생성하고 메서드 사용시 해당 메소드는 static이 아니어도 상관없다. 하지만, 객체 생성 없이 메서드 호출 시에는 해당 메서드를 static 선언해야 한다.

미션

※chap6 - mission

다른 클래스에 저장된 배열 호출하기

  • A클래스에 저장된 배열B를 C클래스에서 호출

    1. A클래스에 public static으로 배열B 선언

    2. C클래스 main에서 A클래스의 main 호출하기
      : A클래스이름.main(args);

    3. C클래스의 main에서 배열B 사용하기
      : A클래스이름.배열B이름.add()...등등

문제

  1. 2
    : 자식은 부모를 품을 수 없다. 강제형변환하여 다운캐스팅 하면 가능하다.

  1. 3
    :private

  1. 오류. apple, fox는 상관 x 클래스라서 형변환하지 않으면 test 클래스에서 fox 언급 시 오류.
  1. 1
    : package 비슷 default

  1. Apple은 Fruit을 상속받았으므로 생성자를 만들면 자바가 super();하고 부모를 자동으로 부르는데, fruit에 기본 생성자가 없다.
    : 자식 생성자에 fruit("빨강");
    or 부모에 기본생성자 추가

  1. 부모가 가진 속성을 자식이 나열했다 ->오버라이딩(재정의) -> 주의점! : 부모가 지정한 접근제어 범위보다 넓게 펼칠 수 없다!!
    -> name(default > public) 안된다.
    & secret은 각자 정의한 비밀이므로 부모ㅡ자식 서로 상관없는 필드

name, number
: static 선언하면 person이 공유하는 show가 있고, student가 공유하는 weight, show가 각자 생긴다.

프로그래밍 문제

profile
zza

0개의 댓글