업 캐스팅 한 인스턴스의 오버라이드된 함수에 대해서 하위 클래스의 함수가 호출 된다.
가상 메소드 개념.
업 캐스팅 인스턴스는 하위 클래스에만 존재하는 메소드나 변수에는 접근 불가능. -> 다운캐스팅 필요
public class Customer {
protected int ID;
protected String Name;
public int bonusPoint;
protected String Grade;
public Customer(String Name, int ID,String gr)
{
this.Name = Name;
this.ID = ID;
this.Grade = gr;
bonusPoint = 10000;
}
public Customer(String Name, int ID)
{
this.Name = Name;
this.ID = ID;
bonusPoint = 10000;
}
public int take(int price)
{
return price;
}
public void info() {
System.out.println(" 이름 "+Name+" 등급 "+Grade+" 포인트 "+bonusPoint);
}
}
public class Vip extends Customer{
double sales;
double bonus;
public Vip(String Name, int ID) {
super(Name,ID);
Grade = "VIP";
sales = 0.5;
bonus = 0.4;
Grade ="VIP";
}
public int take(int price)
{
bonusPoint += bonusPoint*bonus;
price-=(price*sales);
return price;
}
public void info() {
System.out.println(" 이름 "+Name+" 등급 "+Grade+" 포인트 "+bonusPoint);
}
}
public class Middle extends Customer{
double sales;
double bonus;
public Middle(String a, int b,String gr )
{
super(a,b,gr);
sales = 0.1;
bonus =0.02;
}
public int take(int price)
{
bonusPoint += bonusPoint*bonus;
price-=(price*sales);
return price;
}
public void info() {
System.out.println(" 이름 "+Name+" 등급 "+Grade+" 포인트 "+bonusPoint);
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
ArrayList list = new ArrayList();
Customer co1 = new Customer("신이치",1000,"general");
Customer co2 = new Vip("임현준",10001);
Customer co3 = new Middle("고스케",1002,"Silver");
Customer co4 = new Middle("유스케",1002,"Gold");
list.add(co1);
list.add(co2);
list.add(co3);
list.add(co4);
co1.take(10000);
co2.take(10000);
co3.take(10000);
co4.take(10000);
for(Customer co : list)
{
co.info();
}
}
}
'Java' 카테고리의 다른 글
인터페이스 default 키워드 (0) | 2019.10.28 |
---|---|
인터페이스 & 추상 클래스 (0) | 2019.10.28 |
자바 연습 (추상 클래스) (0) | 2019.10.27 |
final 키워드 사용 (0) | 2019.10.27 |
추상 클래스 & 추상 메소드 (0) | 2019.10.27 |