본문 바로가기

코딩/JAVA

JAVA 31. 다형성

다형성(Polymorpism)

프로그램에서 사용되는 각 요소들은 여러가지 자료형을 표현될 수 있는데 이를 다형성이라고 한다. 한가지 요소가 한가지의 형태에만 매칭된다는것은 단형성이다. 최상위 객체인 Object로 다른 객체를 만들 수 있는것도 다형성때문이다. 여기서 사용되는 연산자는 instanceof 이다.

=> 하나의 객체와 메서드가 다른 형태를 가질 수 있는 성질

서브클래스의 객체를 슈퍼클래스의 객체에 대입하거나 서브클래스의 객체를 슈퍼클래스의 객체로 생성하거나, 자료형을 변경할 수 있는것들도 다형성이다. 부모클래스 타입의 참조변수로 자식클래스 타입의 객체를 참조할 수 있게 되는것도 다형성이다. 부모가 자식에서 오버라이딩 한 기능을 사용하게 하는것 등도 포함된다.

 
package java13;
class A {
    void methodA() {
      System.out.println("method_A");
    }
}
class B extends A {
  void methodA() { // methodA() 오버라이딩
    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()를 오버라이딩하지 않았다.
	}
}

package java13;

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 ;  
	  }
}

public 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 java13;

class A2 {
	  int methodA(int a, int b) {
	    return a+b;
	  } 
}
class B2 extends A2 {
	  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;
	    A2 obj1 = new B2();   // 다형성 
	    System.out.println(obj1.methodA(a,b));
	    B2 obj2 = new B2();
	    System.out.println(obj2.methodA(a,b));
	    A2 obj3 = new A2();
	    System.out.println(obj3.methodA(a,b));
	   }
}

 

'코딩 > JAVA' 카테고리의 다른 글

JAVA 33. 문자의 길이와 위치  (0) 2022.08.08
JAVA 32. IO(Input / Output)  (0) 2022.08.08
JAVA 30. 람다식  (0) 2022.08.08
JAVA 29-3. 컬렉션 프레임워크 - SET  (0) 2022.08.08
JAVA 29-2. 컬렉션 프레임워크 - List  (0) 2022.08.08