상속 , 다형성 이란 ?
유지보수 쉽고 확진성 있는 시스템을 개발할수있다 객체지향 의 가장큰 장점 이다.
추상클래스 ,인터페이스까지 이어지는 내용이다.
클래스에서 상속의 의미
새로운 클래스를 정의 할 때 이미 구현된 클래스를 상속 받아서 속성이나 기능이 확장되는 클래스를 구현한다.
새로 코딩을 하는게 아니라 기능을 상속받아서 쓴다.
코드가 재사용의 방법이라고 이해하면 안된다.
상속은 좀더 일반적인 클래스가 있고 그것보다 기능이 구체적인 클래스를 설계할 때 유사한 클래스를 만드는데 기존의 클래스를 기능을 가져다가 확장한 클래스를 만든다 라고 생각한다.
(이질적인 클래스가 아니다.)
코드로 나타낼 때 class B extends A { } 를 쓴다. extends 뒤에 클래스 이름 하나만 올수있다.
상속을 사용하는 경우
상위 클래스는 하위 클래스 보다 일반적인 개념과 기능을 가진다.
하위 클래스는 상위 클래스보다 구체적인 개념과 기능을 가진다.
Extends 뒤에는 단 하나의 class만 사용할수있다.
자바는 single inheritance만을 지원 한다. ( 다중상속이 안된다. )
(이미지)
Protected 예약어
외부 클래스에는 private 으로 하위 클래스에서 public 의 기능을 구현한 키워드이다.
상위 클래스에 protected 로 선언된 변수나 메소드는 다른 외부 클래스에서는 사용할수 없지만 하위 클래스 에서는 사용이 가능하다.
Customer 클래스 - 일반고객
주로 기본생성자에서 초기화를 진행한다.
package inheritance;
import org.omg.Messaging.SyncScopeHelper;
public class Customer {
private int customerID;
private String customerName;
protected String customerGrade;
int bonusPoint;
double bonusRatio;
public Customer() { // 주로 생성자 에서 초기화를 한다.
customerGrade = "SILVER";
bonusPoint = 1000;
}
public String showCustomerInfo() {
return customerName + "님의 등급은 " + customerGrade + "이며 적립된 포인트는 " + bonusPoint + " 점 입니다.";
}
public int calcPrice(int price) {
return price = price * 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;
}
}
상속을 받은 VIPCustomer 클래스 ( agentID 와 salesRatio 기능을 추가한다. )
package inheritance;
public class VIPCustomer extends Customer {
double salesRatio;
private int agentID;
public VIPCustomer() {
customerGrade = "VIP";
bonusRatio = 0.05; // 5프로
salesRatio = 0.1; // 10프로
}
}
CustomerTest 출력 클래스
package inheritance;
public class CustomerTest {
public static void main(String[] args) {
Customer customerLee = new Customer();
customerLee.setCustomerName("이순신");
customerLee.setCustomerID(10010);
customerLee.bonusPoint = 1000;
System.out.println(customerLee.showCustomerInfo());
VIPCustomer customerKim = new VIPCustomer();
customerKim.setCustomerName("김유신");
customerKim.setCustomerID(10020);
customerKim.bonusPoint = 10000;
System.out.println(customerKim.showCustomerInfo());
}
}
'JAVA Programming' 카테고리의 다른 글
[34] 상속에서의 묵시적 형변환 ( 업캐스팅 ) (0) | 2020.07.15 |
---|---|
[33] 상속에서의 super() 상위 부모 생성자 호출 (0) | 2020.07.15 |
[29] ArrayList 을 이용하여 학생의 수강과목 학점 출력하기 (0) | 2020.07.15 |
[28] ArrayList 사용하기 (0) | 2020.07.15 |
[27] 다차원 배열 (0) | 2020.07.15 |