다형성이란 객체를 사용할 때, 변수형태를 바꾸어서 여러타입의 객체를 참조할 수 있다.

결과적으로 이러한 다형성의 개념을 적절하게 이용할 때, 소스코드를 유연하게 구성할 수 있다.

다형성은 <부모 클래스 타입의 참조변수><하위 클래스의 객체를 참조할 수 있게 해준다.>

과일 정보 프로젝트를 구현해보자

1. 부모클래스가 될 Fruit 클래스를 생성하자

  1. 과일의 이름과 가격 , 신선도 변수를 선언해주자.
  2. 변수를 출력할 메소드도 만들어주자.

public class Fruit {

    String name;
     int price;
     int fresh;
    
     public void show() {
         System.out.println("이름 : " + name);
         System.out.println("가격 : " + price);
     }
    
}

2. 자식 클래스가 될 Peach클래스를 생성하자.

  1. 부모클래스의 필드를 초기화 해주자
  2. 만약, 부모클래스안에 부모필드를 초기화하는 생성자가 있다면,  자식클래스에서는 super.( , , ); 초기화 하는 것이 맞다.

public class Peach extends Fruit {
    
     public Peach() {
        
         price=1500;
         name = "복숭아";
         fresh = 75;
        
     }

}

3. 메인클래스와 메인함수를 생성한다.

4. 이제 다형성의 개념으로서, 부모클래스의 참조변수 에다가, 자식클래스의 객체를 생성해서 넣어준다.
   비록 부모클래스의 변수에 넣었지만, 필드나 메소드가 작동하는 것은 new뒤에 붙은 자식클래스의 객체가 본질이다.
   show()메소드는 부모클래스에만 존재하기 때문에, 부모의 메소드를 호출한다. 필요하다면 오버라이딩해서 쓰면된다.

public class Main {

    public static void main(String[] args) {
        
         Fruit fruit = new Peach();
         fruit.show();

    }

}

5. 또하나의 자식클래스 Banana를 만들고, 부모 필드를 초기화해주자.

public class Banana extends Fruit {
    
     public Banana() {
     price = 1000;
     name = "바나나";
     fresh = 80;
     }

}

6. 메인 클래스의 메인함수에서 다시 부모클래스 참조변수에 Banana객체를 넣자.

Fruit fruit2 = new Banana();
fruit2.show();


실제로 어떤 것을 구현할 때, 복숭아인지 / 바나나인지 사용자가 임의적으로 선택할 수 있게 한다.

자식클래스의 인스턴스(객체)를   자신의 변수에다가 넣는 것이 바로 다형성이다.


7. 실제적으로 사용되는 코드로 만들어보자.

  1. 스캐너를 생성한 뒤, 복숭아/ 바나나를 숫자로 입력받도록하자.(입력받을땐 println이 아니라 print로 출력)
  2. 담을 변수는 미리 선언해놓고, 넣을 객체만 if문에 따라 new Banana인지 new Peach인지 구분해서 넣어준다.

public class Main {

    public static void main(String[] args) {
        
        
         Scanner sc = new Scanner(System.in);
         System.out.print("복숭아는 1, 바나나는 2를 입력하세요 : ");
         int input = sc.nextInt();
        
         Fruit fruit;
         if(input == 1) {
             fruit = new Peach();
             fruit.show();
         }else if(input ==2) {
             fruit = new Banana();
             fruit.show();
         }
        
     }

}

다형성 정리

다형성을 이용해서 만약 과일이 아니라, 게임케릭터라고 생각해보면, 입력받은 숫자대로 전사/마법사 등등을 선택 할 수 있다

미리 부모클래스를 만들어, 을 만들어놓은 다음

사용자가 입력한 값에 따라서, 선택된 그리고 완전히 다른 인스턴스 (객체)를 쉽게 바꿔서 대입할 수 있다는 측면에서

유동적으로 자기자신의 변수에 불러오므로, 내용도 유동적으로 바꿔줄 수 있다.

자바














+ Recent posts