Java 다형성 활용과 다운캐스팅(4)
다형성 활용
실습
단골 고객 혜택
Gold 고객 추가
10 프로 할인
2프로 적립
전문 상담원은 없음
GoldCustomer
package witharraytest;
public class GoldCustomer extends Customer {
double saleRatio;
public GoldCustomer(int customerID, String customerName) {
super(customerID, customerName);
customerGrade ="GOLD";
bonusRatio = 0.02;
saleRatio = 0.1;
}
@Override
public int calcPrice(int price) {
bonusPoint +=price*bonusRatio;
return price - (int)(price*saleRatio);
}
}
CustomerTest
package witharraytest;
import java.util.ArrayList;
public class CustomerTest {
public static void main(String[] args) {
ArrayList<Customer> customerList = new ArrayList<Customer>();
Customer customerLee = new Customer(10010,"이순신");
Customer customerShin = new Customer(10011,"신사임당");
GoldCustomer customerHong = new GoldCustomer(10012,"이순신");
GoldCustomer customerYul = new GoldCustomer(10013,"이율곡");
VIPCustomer customerKim = new VIPCustomer(10014,"김유신",12345);
//type이 달라도 묵시적 형변환 때문에 ArrayList에 담을 수 있다.
customerList.add(customerLee);
customerList.add(customerShin);
customerList.add(customerHong);
customerList.add(customerYul);
customerList.add(customerKim);
System.out.println("==========출력=====");
for(Customer customer:customerList) {
System.out.println(customer.ShowCustomerInfo());
}
System.out.println("========= 할인율과 보너스 포인트 결과======");
int price =10000;
for(Customer customer : customerList) {
int cost= customer.calcPrice(price);
System.out.println(customer.getCustomerName()+"님이 "+cost +"를 지불하셨습니다.");
System.out.println(customer.ShowCustomerInfo());
}
}
}
다운캐스팅
주로 overriding 으로 해결하는것이 좋음.
->
실습
package inheritance;
class Animal{
public void move() {
System.out.println("동물이 움직입니다.");
}
}
class Human extends Animal{
public void move() {
System.out.println("사람이 두발로 걷습니다.");
}
public void readBook() {
System.out.println("사람이 책을 읽습니다.");
}
}
class Tiger extends Animal{
public void move() {
System.out.println("호랑이가 네발로 뜁니다.");
}
public void hunting() {
System.out.println("호랑이가 사냥을 합니다.");
}
}
class Eagle extends Animal{
public void move() {
System.out.println("독수리가 하늘로 날읍니다.");
}
public void flying() {
System.out.println("독수리가 쥐를 잡습니다.");
}
}
public class AnimalTest {
public static void main(String[] args) {
AnimalTest test = new AnimalTest();
test.moveAnimal(new Human());
test.moveAnimal(new Tiger());
test.moveAnimal(new Eagle());
//Animal animal = new Human();
//위와 같이 생성한것과 같은 것임
}
public void moveAnimal(Animal animal) {
animal.move();
//전의 인스턴스를 추적하기 위해 instanceof 사용
if(animal instanceof Human) {
Human human = (Human)animal;
human.readBook();
}
else if(animal instanceof Tiger) {
Tiger tiger = (Tiger)animal;
tiger.hunting();
}
else if(animal instanceof Eagle) {
Eagle eagle = (Eagle)animal;
eagle.flying();
}
else {
System.out.println("지원되지 않는 기능입니다.");
}
}
}
하위 클래스에 추가 메소드가 있을 수 있음.
들어온 animal 이 Human 인가를 확인 (원래 인스턴스 타입을 확인)
instanceof
Author And Source
이 문제에 관하여(Java 다형성 활용과 다운캐스팅(4)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@been_gam/Java-다형성-활용과-다운캐스팅4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)