객체 간의 상속

클래스 상속

  • 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속받아서 속성이나 기능을 확장하여 클래스를 구현함

  • 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현할 때 상속한다

  • 사용 방법 class B extends A
    단 하나의 클래스만 상속할 수 있다

상속을 구현하는 이유

  • 상위 클래스는 하위 클래스보다 더 일반적인 개념과 기능을 갖는다
  • 하위 클래스는 상위 클래스보다 더 구체적인 개념과 기능을 갖는다
  • 하위 클래스가 상위 클래스의 속성과 기능을 확장(extends) 한다는 의미

상속 실습

멤버쉽 시나리오

  • 회사에서 고객 정보를 활용한 맞춤 서비스를 하기 위해 일반고객(Customer)과
    이보다 충성도가 높은 우수고객(VIPCustomer)에 따른 서비스를 제공하고자 함
    물품을 구매 할때 적용되는 할인율과 적립되는 보너스 포인트의 비율이 다름
    여러 멤버십에 대한 각각 다양한 서비스를 제공할 수 있음
    멤버십에 대한 구현을 클래스 상속을 활용하여 구현해보기

  • 상속 관계에서 private으로 설정된 변수/메서드는 하위 클래스에서 접근할 수 없음
    그 경우 protected로 변경하여 외부 클래스는 접근할 수 없고 상속 관계의 하위 클래스에서만 접근 가능하도록 설정

  • Customer.java (부모 클래스)

    변수 : 고객 id, 이름, 등급, 적립 비율, 적립금
    메서드: 생성자(실버 등급 부여, 적립 비율 부여), 적립금 계산, 정보 출력

  • VIPCustomer.java (자식 클래스)

    변수 : + 상담원 id, 할인 비율
    메서드: 생성자(등급 부여, 적립 비율, 할일 비율 부여), 상담원 id 출력

VIPCustomer를 생성하면 자동으로 Customer가 생성됨 default constructor로 컴파일러가 생성함
= super() 키워드의 역할, 안 써도 됨
만약 default constructor가 없다면 에러 발생,

public VIPCustomer(){
	super(0,null); 
} 또는 
VIPCustomer(int customerID, String customerName){
	super(customerID, customerName); 
}
처럼 직접 만들어줘야함

형 변환 - 업캐스팅

  • 상위 클래스로 변수를 선언하고 하위 클래스의 생성자로 인스턴스를 생성
    Customer vc = VIPCustomer(); - 가능, Customer의 메서드와 변수만 사용 가능

    VIP 생성자에 의해 VIP 클래스의 모든 멤버 변수에 대한 메모리는 생성되었지만,
    변수의 타입이 Customer이기 때문에 실제 접근 가능한 변수나 메서드는 Customer의 변수와 메서드이다

    • 생성은 다 된다. 상위 클래스의 형으로 변환이 된 경우 상위 클래스에 선언된 변수들만 접근할 수 있다
  • 상위 클래스 타입의 변수에 하위 클래스 변수가 대입

profile
안녕하세요. Chat JooPT입니다.

0개의 댓글