Java 오버라이딩과 다형성(3)
지난번 시간에 한
오버라이딩 - 똑같은 이름, 매개변수의 함수를 재정의 할 수 있는것
실습 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 > 선택
@~~ == 컴파일러에게 어떤 일을 하는지 알려줌
Author And Source
이 문제에 관하여(Java 오버라이딩과 다형성(3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@been_gam/오버라이딩과-다형성3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)