본문 바로가기
자바(Java)/자바 클래스

[Java Class.07] 다형성(Polymorphism)

by 긱펀 2024. 2. 23.
반응형

[Java Class.07] 다형성(Polymorphism)

 

1.다형성(Polymorphism)이란?

  • 다형성이란, 사용 방법은 같지만 다양한 객체를 이용해서 다양한 실행결과가 나오도록 하는 성질입니다.
  • 다형성을 구현하려면 메소드 재정의와 타입 변환이 필요합니다.

 

2.자동 타입(Type) 변환(promotion)

  • 타입 변환이란 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말한다.
  • 예를 들어 byte 타입을 int 타입으로 변환하는 것이다.
  • 타입 변환에는 (1)자동(묵시적) 타입 변환과 (2)강제(명시적) 타입 변환이 있다.

2.1.변수에서 타입 변환(Type conversion, casting)

  • 자동(암묵적, 묵시적, implicit) 형변환: 컴파일러가 자동으로 변환
  • 강제(명시적) 형변환: 사용자가 직접 괄호( ) 를 사용하여 변환
public class Main {
  public static void main(String[] args) {
    byte byteValue = 1;
    int intValue = byteValue; // 자동 형변환 OK

    char charValue = 'A';
    intValue = charValue; // 자동 형변환 OK

    // charValue = intValue; // 자동 형변환 NO
    charValue = (char)intValue; // 강제 형변환 필요

    long longValue = intValue; // 자동 현변환 OK
    float floatValue = longValue; // 자동 형변환 OK
    double doubleValue = floatValue; // 자동 형변환 OK
  }
}

 

2.2.클래스에서 타입 변환

부모 클래스 변수 = 자식 클래스 타입;

 

  • 클래스 간의 타입 변환은 상속 관계에 있는 클래스 사이에서 발생한다.
  • 자식 타입은 부모 타입으로 자동 타입 변환이 가능하다
// 부모 클래스
public class Parent {
  int p1;

  public void method1() {
    System.out.println("Parent method1");
  }

  public void method2() {
    System.out.println("Parent method2");
  }
}

 

public class Child extends Parent {
  int c1;
  
  @Override
  public void method1() {
    System.out.println("Child method1");
  }
  
  public void method3() {
    System.out.println("Child method3");
  }
}

 

public class Main {
  public static void main(String[] args) {
    Child child = new child();

    Parent parent = child; // 자동 타입 변환
    parent.method1();
    parent.mehtod2(); // override 된 메소드가 호출됨
    // parent.method3(); // 에러 발생
  }
}

 

 

  • 부모 타입으로 자동 타입 변환된 이후에는 부모 클래스에서 선언된 필드와 메소드만 접근이 가능하다.
  • 예외적으로, 메소드가 자식 클래스에서 오버라이드(Override)되었다면, 자식 클래스의 메소드가 대신 호출된다.

 

 

3.필드의 다형성

 

 

 

 

 


 

728x90
반응형

댓글