새로운 클래스를 정의할 때 이미 구현된 클래스를 상속받아서 속성이나 기능을 확장하여 클래스를 구현함
이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현할 때 상속한다
사용 방법 class B extends A
단 하나의 클래스만 상속할 수 있다
회사에서 고객 정보를 활용한 맞춤 서비스를 하기 위해 일반고객(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의 변수와 메서드이다
- 생성은 다 된다. 상위 클래스의 형으로 변환이 된 경우 상위 클래스에 선언된 변수들만 접근할 수 있다
상위 클래스 타입의 변수에 하위 클래스 변수가 대입