ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 다형성
    자바/자바 기초 2021. 11. 10. 17:10
    728x90

    다형성(polymorphism)

    • 다형성

      • 조상클래스 타입의 참조변수로 자손클래스의 인스터스를 참조할 수 있도록 하였다는 것.
      
      // CationTv는 tv를 상속받음
      Tv t = new Tv();
      CpationTv c = new CationTv();
      Tv t = c
      
      // t 는 CaptionT 인스터스의 모든 멤버를 사용할 수 없다.
      // 둘 다 같은 타입 인스턴스지만 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다.
      
    • 참조변수가 사용할 수 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야 한다.

    • 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다.

    • 자손타입의 참조변수로 조상타입의 인스터스를 참조할 수 없다.

    • 형변환

      • 자손 타입 > 조상 타입 (Up-Casting) : 형변환 생략 가능
      • 자손 타입 < 조상타입 (Down-casting) : 형변환 생략 불가
      // FireEngine 은 Car을 상속 받음
      Car car = null
      FireEngine fe = new FireEngine();
      FireEngine fe2 = null;
      
      car = fe // 형변환 생략 가능 (car)fe
      fe2 = (FireEngine)car // 형변환 생략 불가능
      // 여기서 중요한점 car의 인스턴스 참조 타입을 봐야함 fireEngine이여야지만 가능 
      • 서로 상속관계에 있는 타입간의 형변환은 양방향으로 자유롭게 수행될 수 있으나, 참조변수가 가리키는 인스턴스의 자손타입으로형변환은 허용되지 않는다. 결국 참조변수가 가르키는 인스턴스의 타입이 무언인지 확인하는 것이 중요하다.
    • instance of

      • 어떤 타입에 대한 instanceof연산의 결과가 true라는 것은 검사한 타입으로 형변환이 가능하다는것이다.
    • 참조변수와 인스턴스의 연결

      • 조상 클래스에 선언도니 멤버변수와 같은 이름의 인스턴스변수를 자손 클래스에 중복으로 정의했을 때, 조상타입의 참조변수로 자손 인스턴스를 참조하는 경우와 자손타입의 참조 변수로 자손 인스턴스를 참조하는 경우는 서로 다른 결과를 얻는다

        • 메서드의 경우 조상 클래스의 메서드를 자손의 클래스에서 오버라이딩한 경우에도 참조 변수의 타입에 관계없이 항상 실제 인스턴스의 메서드가 호출 되지만, 멤버변수의 경우 참조변수의 타입에 따라 달라진다.

        • static 메서드는 static 변수처럼 참조변수의 타입에 영향을 받는다.
          참조변수의 타입에 영향을 받지 않는 것은 인스턴스 메서드 뿐이다.

        • static 메서드는 반드시 참조변수가 아닌 클래스이름. 메서드()로 호출해야 한다.

      //child 는 parent 를 상속
      // method 메소드 중복 ,  x 변수 중복
      
      Parent p = new Child();
      Child c = new Child();
      
      System.out.prinit(p.x); // parent x 
      
      System.out.prinit(c.x); // child x 
      
      System.out.prinit(p.method); // child method
      
      System.out.prinit(c.method); // child method
      
      
    - 매개변수의 다형성
      ```java
      void buy(product p ){
        money =money - p.price;
        bonusPoint = ponusPoint + p.bounsPoint;
      }
    
    • 매개변수가 Product타입의 참조변수라는 것은 메서드의 매개변수로 Productc클래스의 자손타입의 참조변수면 어느것이나 매개변수로
      받아들일 수 있다.

    728x90

    '자바 > 자바 기초' 카테고리의 다른 글

    자바 Exception  (0) 2021.11.10
    내부 클래스  (0) 2021.11.10
    인터페이스  (0) 2021.11.10
    제어자  (0) 2021.11.10
    초기화 블럭  (0) 2021.11.10
Designed by Tistory.