상세 컨텐츠

본문 제목

JAVA 다형성(Polymorphism)

BackEnd/JAVA

by H_Develop 2022. 8. 4. 09:24

본문

다형성

하나의 오브젝트와 메서드가 다양한 형태를 가질 수 있는 성질.

프로그램에서 사용되는 각 요소들이 여러 가지 자료형으로 표현될 수 있는데,

한가지 요소는 한 가지의 형태로만 매칭된다는 것이 단형성이고,

하나의 요소가 여러 형태로 매핑되는 것을 다형성이라 한다.

 -> OOP(Object Oriented Programming)에서는 매우 중요한 개념이다.

최상위 객체인 Object로 다른 객체를 만들 수 있는 것도 다형성 때문에 가능하다.

여기서 사용되는 연산자는 instanceof 이다.

같은 이야기로, 하나의 객체와 메서드가 다양한 형태를 가질 수 있는 성질이다.

 

서브 클래스의 객체를 슈퍼 클래스의 객체에 대입.

서브 클래스의 객체를 슈퍼 클래스의 객체로 생성 및 자료형을 변경할 수 있는 것.

부모 클래스 타입의 참조 변수로 자식 클래스 타입의 객체를 참조할 수 있는 것.

부모 자식의 오버라이딩 된 기능을 사용하게 하는 것.

 

class A {
    void methodA() { 
      System.out.println("method_A");
    }
}
class B extends A {
  void methodA() { // method() 오버라이딩,다형성
    System.out.println("method_B");
}
   void methodC() {
     System.out.println("method_C");
   }
}
public class Test11 {
	public static void main(String[] args) {
  A a=new B();  // 다형성
  a.methodA();
	   // a.methodC(); # 오류!! Class C에서 methodA()를 오버라이딩하지 않았다.
	}
}

 

abstract class Calc2 {  // 추상 클래스
  int a ;
  int b ;
  abstract int result() ; //추상 메서드
  void printResult() {
    System.out.println(result()) ; //메서드를 인자로 받음
  }
  void setData(int m, int n) {
  a = m ;
  b = n ;
  }
}
class Plus extends Calc2 {
  int result() {   // result() 메서드 오버라이딩, 다형성
    return a + b ; 
  }
}
class Minus extends Calc2 {
  int result() { 
    return a - b ;  
  }
}
class Test12 {
  public static void main(String [] args) {
    int x = 54, y = 12 ; 
    Calc2 calc1 = new Plus() ;
    Calc2 calc2 = new Minus() ;
    calc1.setData(x, y) ;
    calc2.setData(x, y) ; 
    System.out.print(x + " + " + y + " = ") ;
    calc1.printResult( ) ;
    System.out.print(x + " - " + y + " = ") ;
    calc2.printResult( ) ;
  }
}

 

package java03;
class A {
  int methodA(int a, int b) {
    return a+b;
  } 
}
class B extends A {
  int methodA(int a, int b) {
    return a-b;
}
void methodB() {
  System.out.println("hi");
  }
}
public class Test13 {
  public static void main(String[] args) {
    int a, b;
    a= 20;
    b= 10;
    A obj1 = new B();   // 다형성 
    System.out.println(obj1.methodA(a,b));
    B obj2 = new B();
    System.out.println(obj2.methodA(a,b));
    A obj3 = new A();
    System.out.println(obj3.methodA(a,b));
   }
}

'BackEnd > JAVA' 카테고리의 다른 글

JAVA BufferedReader  (0) 2022.08.09
JAVA IO(Input/Output)  (0) 2022.08.09
JAVA Lambda 람다식  (0) 2022.08.04
JAVA Thread synchronized 쓰레드 동기화, wait() notify()  (0) 2022.08.03
JAVA Thread (Daemon, join() )  (0) 2022.08.03

관련글 더보기