다형성
다형성: 하나의 메소드 or 클래스가 있을 때 다양한 방법으로 동작하는 것
1) overloading

2)
첫번쨰 예제를 살펴보자 B로 객체를 만드는데 데이터 타입이 A인 경우

그렇다면 오버라이딩 했을 땐 뭐가 실행될까?? === B에 있는 x가 실행됐다!


조금더 예시를 변경해보자

즉 클래스 A의 행세를 해서 A에 있는 메소드만 실행가능한데 B에 있는 메소드가 상위(A) 메소드를 오버라이딩 하면 그것을 실행한당
*****다른 예시
3) 기존에 짜던 방식으로 코딩을 했을 경우

새로운 방식으로 했을 때(다형성을 이용해보자)

c1과 c2 모두 Calculator라는 데이터 형식이지만 실제로 동작했을 때 run실행 했을 때 sun과 avg구체적 구현(+와 -)은 다르다
결과값
+ sum :30
+ avg :15
- sum :30
- avg :15
근데 여기서 또 변경이 가능하다!!
-------> "실행결과"라는 값을 추가해서 출력해주고 싶을 떄

뭔가 넣기는 했지만 중복을 제거 할 수 없을까?
run부분을 아래서 다시 새로 만들어서 c1과 c2를 넣어서 실행

!!!but 만약에 기존 방식으로 했었다면 어떻게 되었을까?!!!!
--> 다형성을 이용하지 않고 하니까 중복되는 로직이 꽤 많아진다!

4)인터페이스와 다형성
모든 기능을 쓰려면 D처럼 하겠지만 특정한 인터페이스의 기능만 사용한다면 데이터형식을 I2이렇게 지정하면 댄당
ex) 휴대폰(클래스)을 엄니한테 전화기라고 말한다면 ----> 전화기의 용도로만 쓴다(인터페이스 용도)
" 꼬맹이한테 게임기라고 한다면? ---> 게임기로 쓴다(인터페이스 용도)
