Java 오버라이딩과 다형성(3)

16511 단어 JavaJava

지난번 시간에 한

오버라이딩 - 똑같은 이름, 매개변수의 함수를 재정의 할 수 있는것

실습 1.

Customer

VIPCustomer

OverridingTest

package inheritance;

public class OverridingTest {

	public static void main(String[] args) {
		Customer customerLee = new Customer(100010, "Lee");
		int price = customerLee.calcPrice(10000);
		System.out.println("지불 금액은 "+price +"이고, "+ customerLee.ShowCustomerInfo());
		
		VIPCustomer customerKim = new VIPCustomer(100010, "Kim", 100);
		price = customerKim.calcPrice(10000);
		System.out.println("지불 금액은 "+price +"이고, "+ customerKim.ShowCustomerInfo());
	}

}

결과 화면

실습 2.

만약 type 과 instance 가 다른 것을 만들고, 메소드를 부른다면, 어떤 메소드가 불릴까?
OverridingTest

Customer customerWho = new VIPCustomer(10010, "who", 100);
		int price = customerWho.calcPrice(10000);
		System.out.println("지불 금액은 "+price +"이고, "+ customerWho.ShowCustomerInfo());

답: instance 의 메소드가 불린다.
결과 화면

지불 금액은 9000이고, who님의 등급은 VIP이며, 보너스 포인트는 500입니다.


이렇게 .을하면 Customer 관련 변수와 메소드만 보인다.
type 것만 참조 할 수 있다.
이중 calcPrice 는 instance 것으로 불린다.

가상함수의 원리


재정의된 메서드가 있다면 재정의 된 메서드가 불린다.

가상메서드

👩‍🦰 결론

💜엄청 중요!


int add(int a, int b){
return a+b;
}

add(5,3)
add(3,0)
똑같은 함수 참조

type이 아닌 instance 의 메소드가 호출이 된다.

다형성

코드는 한줄인데, 다향한 구현을 나타낼 수 있는것

실습 코드

package inheritance;

class Animal{
	public void move() {
		System.out.println("동물이 움직입니다.");
	}
}

class Human extends Animal{
	public void move() {
		System.out.println("사람이 두발로 걷습니다.");
	}
}

class Tiger extends Animal{
	public void move() {
		System.out.println("호랑이가 네발로 뜁니다.");
	}
}

class Eagle extends Animal{
	public void move() {
		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();
	}

}

결과 화면

사람이 두발로 걷습니다.
호랑이가 네발로 뜁니다.
독수리가 하늘로 날읍니다.


다형성 활용하기

실습 코드

package inheritance;

public class GoldCustomer extends Customer{
	
	public GoldCustomer() {
		bonusRatio = 0.05;
	}
	
	@Override
	public int calcPrice(int price) {
		// TODO Auto-generated method stub
		return super.calcPrice(price);
	}

	@Override
	public String ShowCustomerInfo() {
		// TODO Auto-generated method stub
		return super.ShowCustomerInfo();
	}
	
}

👧 마우스 오른쪽 클릭 > source > overriding > 선택
@~~ == 컴파일러에게 어떤 일을 하는지 알려줌

좋은 웹페이지 즐겨찾기