코딩하는 털보

OOP - 25 본문

IT Study/JAVA OOP

OOP - 25

이정인 2020. 12. 18. 19:38

객체 지향 프로그래밍

25. 상속이란

클래스에서 상속의 의미 :
새로운 클래스를 정의할 때 이미 구현된 클래스를 상속받아서
속성이나 기능이 확장되는 클래스를 구현 함.

class B extends A {
}

상속하는 클래스 : 상위 클래스
상속받는 클래스 : 하위 클래스

자바에서는 다중 상속이 불가능하다.

상속을 사용하는 경우 :
상위클래스는 더 일반적인 개념과 기능을 가짐
하위클래스는 더 구체적인 개념과 기능을 가짐

상위 클래스

package inheritance;

public class Customer {

    protected int customerID; // 하위 클래스들이 참조할수 있도록 private가 아닌 protected 사용
    protected String customerName;
    protected String customerGrade;
    int bonusPoint;
    double bonusRatio;

    public Customer() {
        customerGrade="SILVER";
        bonusRatio=0.01;
    }

    public int calcPrice(int price) {
        bonusPoint += price*bonusRatio;
        return price;
    }

    public String showCustomerInfo() {
        return customerName+"님의 등금은 "+customerGrade+"이며, 적립된 포인트는 "+bonusPoint+"점 입니다.";
    }

    public int getCustomerID() {
        return customerID;
    }

    public void setCustomerID(int customerID) {
        this.customerID = customerID;
    }

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    public String getCustomerGrade() {
        return customerGrade;
    }

    public void setCustomerGrade(String customerGrade) {
        this.customerGrade = customerGrade;
    }

}

하위 클래스

package inheritance;

public class VIPCustomer extends Customer{ //상위 클래스(Customer) 지정

    double salesRatio;
    private int agentID;

    public VIPCustomer() {
        customerGrade = "VIP"; //만약 상위 클래스에서 private인 경우 사용할 수 없음
        bonusRatio = 0.05;
        salesRatio = 0.1;
    }
}

사용

package inheritance;

public class CustomerTest {
    public static void main(String[] args) {

        Customer Lee = new Customer();
        Customer Kim = new VIPCustomer();

        Lee.setCustomerID(10010);
        Lee.setCustomerName("이순신");
        Lee.bonusPoint = 1000;

        Kim.setCustomerID(10020);    //하위 클래스에서 상위 클래스의 기능 사용
        Kim.setCustomerName("김유신");
        Kim.bonusPoint = 10000;

        System.out.println(Lee.showCustomerInfo());
        System.out.println(Kim.showCustomerInfo());
    }
}
Comments