티스토리 뷰

카테고리 없음

다형성 응용

Xion 2019. 9. 15. 17:35

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

package org.opentutorials.javatutorials.polymorphism;

abstract class Calculator{

int left, right;

public void setOprands(int left, int right){

this.left = left;

this.right = right;

}

int _sum() {

return this.left + this.right;

}

public abstract void sum();

public abstract void avg();

public void run(){

sum();

avg();

}

}

class CalculatorDecoPlus extends Calculator {

public void sum(){

System.out.println("+ sum :"+_sum());

}

public void avg(){

System.out.println("+ avg :"+(this.left+this.right)/2);

}

}

class CalculatorDecoMinus extends Calculator {

public void sum(){

System.out.println("- sum :"+_sum());

}

public void avg(){

System.out.println("- avg :"+(this.left+this.right)/2);

}

}

public class CalculatorDemo {

public static void main(String[] args) {

 

Calculator c1 = new CalculatorDecoPlus();

//a(부모클래스)에 선언된 setOprands는 실행되면서 run안에 sum,avg호출과 동시에  
//자식 클래스에서 재정의한 
// sum과 avg호출

 

c1.setOprands(10, 20);

c1.run();

 

Calculator c2 = new CalculatorDecoMinus();

c2.setOprands(10, 20);

c2.run();

}

 

}

 

 

                                                      간단 요약

->다향성이란  부모class를 datatype으로 취하는 즉, 부모class 행세하는 척 하는 자식 인스턴스 변수를 만들어

부모에게 정의된 메소드를 사용할 수 있지만 메소드 오버라이드를 통하여 자식class에 동일한 메소드가 있을 경우

자식 메소드를 실행하게 한다.

또한 , 부모 class에서 선언된 메소드가 자식 class에 없을 경우 그것은 실행이 불가능하다 

즉 , 오버라이드  OR 오버로딩을 하지 않으면 실행 불가능하다.

                                                       하지만 !!!

 

위와같이 public static void execute(Calculator cal) 이라는 메소드를 선언하여 데이터타입인 Calculator를 취하는 인자값으로 받아버리게 되면 더욱 간결한 코드가 될것이다 . 

여기서 , ※만약 ! 34행에서 Calculator c1 = new CalculatorDecoPlus();를 

                                  CalculatorDecoPlus c1 = new CalculatorDecoPlus();

      -> 이렇게 선언 후 , 넘겨주게되면 CalculatorDecoMinus();역시 똑같은 방법으로 위와 같이 선언을 해야하기 때문에

           좀 더 효율적인 코드로는 사진과 같이 정의하는 것이 올바르다.