다형성
하나의 오브젝트와 메서드가 다양한 형태를 가질 수 있는 성질.
프로그램에서 사용되는 각 요소들이 여러 가지 자료형으로 표현될 수 있는데,
한가지 요소는 한 가지의 형태로만 매칭된다는 것이 단형성이고,
하나의 요소가 여러 형태로 매핑되는 것을 다형성이라 한다.
-> 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));
}
}| 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 |