다형성(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 |