3-01. 객체 간의 상속은 어떤 의미일까?

클래스 상속
이미 구현된 클래스를 상속 -> 속성이나 기능을 확장하여 클래스를 구현

class ChildClass extends ParentClass {
}
  • extends 뒤에는 하나의 클래스만 올 수 있음

3-02. 상속을 활용한 멤버십 클래스 구현하기

CustomerTest

Customer class / VipCustomer class

  • Customer class에서 protected를 써야 Vipcustomer class에서 customerGrade에 대한 접근이 가능

3-03. 상속에서 클래스 생성 과정과 형 변환

하위 클래스를 생성하면 상위 클래스가 먼저 생성 됨
ex) new VipCustomer() -> Customer() 먼저 호출

super 키워드
super()는 상위 클래스의 기본 생성자를 호출

형 변환(업캐스팅)
상위 클래스로 변수를 선언, 하위 클래스의 생성자로 인스턴스를 생성
-> 상위클래스 타입에 있는 것만 접근 가능함

3-04. 메서드 재정의하기(overriding)

오버라이딩(overriding) - 상위클래스에서 정의된 내용을 하위클래스에서 재정의할 수 있음

@Override
public int calcPrice(int price) {
	return ~
}

overriding 어노테이션(annotation)

3-05. 메서드 재정의와 가상 메서드 원리

  • 가상 메서드 테이블에서 각 메서드에 대한 주소를 갖고 있음
  • 재정의된 경우, 재정의 된 메서드의 주소(다른 주소)를 가리킴

3-06. 다형성과 다형성을 사용하는 이유

다형성(polymorphism)

  • 같은 코드에서 여러 실행 결과가 나옴
  • 객체지향 프로그래밍의 특징
  • 유연성, 확장성, 유지보수 용이

3-07. 상속은 언제 사용 할까?

IS-A 관계

  • 일반적인 개념과 구체적인 개념의 관계
    ex) Animal - Human, Tiger ...

HAS-A 관계

  • 일반적인 포함 개념의 관계
    ex) Computer - CPU, RAM ...

3-08. 다운 캐스팅과 instanceof

다운 캐스팅(Downcasting)
업캐스팅된 클래스 -> 원래 타입으로 형 변환
하위클래스로의 형 변환은 명시적으로 해야함!

Customer vc = new VIPCustomer();              
VIPCustomer vCustomer = (VIPCustomer)vc;      

instanceof
참조변수가 참조하고 있는 인스턴스의 실제 타입인지 T/F

3-09. 추상 클래스(abstract class) 구현하기

추상 클래스(abstract class)
메서드의 선언만 있는 추상 메서드(abstract method)를 포함한 클래스

  • 메서드에 구현 코드가 없으면 abstract 로 선언
  • abstract로 선언된 메서드를 가진 클래스는 abstract로 선언
  • abstract로 선언되면 인스턴스화 X
  • 추상클래스 내에 구현된 메서드 -> 하위 클래스에서 사용
  • 추상클래스 내에 추상 메서드 -> 하위 클래스에서 구현해야 함

3-10. 추상 클래스의 응용 - 템플릿 메서드 패턴

템플릿 메서드
상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의
하위 클래스에서 다르게 구현되어야 할 부분 -> 추상 메서드로 선언, 하위 클래스에서 구현

  • final로 선언하여 하위 클래스에서 재정의 할 수 없게 함

Car Class

ManualCar / AICar

CarTest

3-11~16. 인터페이스(interface)

인터페이스

  • 모든 메서드 추상 메서드 선언 public abstract
  • 모든 변수 상수 선언 static final
    ex)

하나의 클래스가 여러 인터페이스 구현 가능
디폴트 메서드가 중복 되는 경우 -> 구현하는 클래스에서 재정의

인터페이스 간에도 상속이 가능

클래스 상속 + 인터페이스 사용

class A extends ClassB implements InterfaceC

BookShelf

0개의 댓글