[Java] 상속과 다형성 1

C____JIN·2022년 6월 22일
0

Java

목록 보기
4/9
post-thumbnail

상속

클래스 상속

  • Customer 클래스
public class Customer {
	protected int customerId;
    protected String cutomerName;
    protected String customerGrade;
    int bonusPoint;
    double bonusRatio;
    
    public Customer() {
    	cutomerGrade = "SILVER";	//기본 등급
        bonusRatio = 0.01;	//보너스 포인트 기본 적립 비율
    }
    
    public int calcPrice(int price) {
    	bonusPoint += price * bonusRatio;	//보너스 포인트 계산
        return price;
   	}
    
    public String showCustomerInfo() {
    	return cutomerName + " 님의 등급은 " + cutomerGrade + "이며, 보너스 포인트는" + bonusPoint + "입니다.";
    }
}
  • VIPCustomer 클래스 구현하기
    • Customer 클래스 상속
public class VIPCustomer extends Cutomer {
	private int agentId;	//VIP 고객 상담원 ID
    double salseRatio;	//할인율
    
    public VIPCustomer() {
    	customerGrade = "VIP";
        bonusRatio = 0.05;
        saleRatio = 0.1;
    }
    
    public int getAgentId() {
    	return agentId;
    }
}
  • Customer 클래스를 상속 받아 Customer 클래스의 protected 변수에 접근 가능

상속에서 클래스 생성

  • 하위 클래스가 생성되는 과정
    • Customer 클래스의 생성자 (Customer()) 수정
      public Customer() {
      	customerGrade = "SILVER";
          bonusRatio = 0.01;
          System.out.println("Customer() 생성자 호출");
      }
    • VIPCustomer 클래스의 생성자 (VIPCustomer()) 수정
      public VIPCustomer() {
      	customerGrade = "VIP";
          bonusRatio = 0.1;
          System.out.println("VIPCustomer() 생성자 호출");
      }
  • 테스트 결과 상위 클래스인 Customer() 생성자가 먼저 호출 되고 그다음에 VIPCustomer() 생성자가 호출됨

부모를 부르는 예약어, super

  • super()
    • 컴파일러가 자동으로 추가하는 코드
      상위 클래스의 생성자가 호출됨

메서드 오버라이딩

@ Override

  • 재정의된 메서드라는 정보 제공

  • VIPCustomer 클래스에서 clacPrice() 메서드를 재정의

    @Override
    public int calcPrice(int price) {
    	bonusPoint += price * bonusRatio;	//보너스 정립
      return price - (int)(price * saleRatio);
    }
    • 이 처럼 상위 클래스에서 정의되어있는 메서드를 재정의 하는 것을 오버라이드라고 함
profile
개발 블로그🌐 개발일지💻

0개의 댓글