Polymorphism(다형성)

2023. 7. 13. 12:50JAVA

 

public class First {

       int a;


       void showFirst() {

       System.out.println("show First...");

       }


       void show() {

       System.out.println("Frist클래스의 show()메소드");

       }

  }
public class Second extends First{

        int b;


        void showSecond() {

        System.out.println("show Second..");

        }


         //override

         void show() {

         System.out.println("Second클래스의 show메소드..");

         }

   }
public class Third extends Second{

        @Override

        void show() {

        System.out.println("Third클래스의 show메소드....");

        }

   }
public class Test extends First{

       @Override

       void show() {

        // TODO Auto-generated method stub

        System.out.println("Test클래스의 show메소드...");

        }

    }
public class Main {

       public static void main(String[] args) {

       // TODO Auto-generated method stub


       First f=new First(); //제대로 된 casting = 참조변수가 제대로된 객체를 잡는것

       Second s=new Second();


       // 다른 class의 캐스팅은 안 되는 것이 정상

       // 하지만, 상속관계라면 ...

       // 부모클래스의 참조변수로 자식객체를 참조할 수 있음.

       f= new Second(); // Up casting


       //자식클래스의 참조변수로는 부모객체를 참조할 수 없음.

       //s= new First(); //error -- Down casting..


       //업캐스팅을 하면 부모의 기능은 사용할 수 있지만

       //자식객체의 고유 기능들은 사용이 불가능.

       f.a= 10;

       f.showFirst();

       //f.b= 20; //error

       //f.showSecond(); //error


       //그럼에도 자식의 고유기능을 사용하고 싶다면?

       //방법없음. 새로운 자식 참조변수가 필요함.

       Second s2;

       //f참조변수가 참조하고 있는 Second객체의 주소를 s2에 대입해주기

       s2=(Second)f; //명시적 형변환 : Down casting

       s2.b=20;

       s2.showSecond();


        First f2= new First(); //제대로 된 캐스팅

        Second s3;

        //s3=(Second)f2; //error- 무조건 명시적 형변환 한다고 실제 객체가 변경되는 것은 아님.

        다운캐스팅은 업캐스팅이 이루어진것만 가능


        Second s4= new Second();

        s4.show();


        First f3= new First();

        f3.show();


        First f4= new Second();

        f4.show(); //실제 참조하고 있는 Second 객체의 오버라이드된 show가 발동함


        // 이 기능이 어떤 유용한 점이 있는가??


        //업 캐스팅을 사용하는 이유 여러개...중

        //1. 부모참조변수 1개로 여러 자식객체들을 제어 가능

        First obj;

        obj= new First();

        obj.show();


        obj= new Second();

        obj.show();


         //First를 상속한 Test클래스

         obj= new Test();

         obj.show();


         //Second를 상속한 Third클래스

         obj= new Third();

         obj.show();


         //위처럼 obj.show()라는 똑같은 모양의 코드명령에

         //다른 기능으로 동작되는 특징을 [다형성 Polymorphism] 이라고 부름


         //다형성의 효용성이 보여지는 예제 실습.. 다음프로젝트로..

          }

    }

'JAVA' 카테고리의 다른 글

Abstract  (0) 2023.07.14
Polymorphism(다형성)예제  (0) 2023.07.13
Final  (0) 2023.07.13
Inheritance(상속)예제  (0) 2023.07.12
Inheritance(상속)  (0) 2023.07.12