본문 바로가기

개발중/Java

추상 클래스를 상속 받는 친구가 하는 일

728x90
반응형

추상 클래스를 상속 받는 친구가 하는 일 🌞


추상클래스가 뭘 하는지 알아봤으면 이제 써먹어 볼까요 ?

 

CalculatorDecoPlus 라는 Class 가 있어요.

이건 언니가 아는 클래스 처럼 생겼죠 ?

class CalculatorDecoPlus {
    
}

 

근데 요로코롬 extends 를 써주고 Calculator를 써준다는 것이 뭔 뜻인지 알아요 ?

class CalculatorDecoPlus extends Calculator {
    
}

 

여기서도 단어 먼저 보면 extends 라는 뜻을 찾아보면

확장한다! 즉 상속을 받는거에요!

 

 

즉, 아래처럼 말하는 거에요.

 

CalculatorDecoPlus라는 Class 는

Calculator 에 모든 기능을 상속 받겠다.

 

 

그런데 상속만 받으면 아래처럼 에러가 나요.

이런 에러래요 근데 이 버튼 보여요 ?

 

 

이거 누르면 어떻게 되냐면

아래처럼 오버라이드가 두개가 생겨요.

 

 

Calculator 가 말한거에요.

 

이자식아 너 내 재산 상속받고 싶으면 내가 정의한 추상 메소드 구현해야 해 ~

아니면 넌 날 쓸 수 없어 @^^@

 

그래서 CalculatorDecoMinus 는 어미(Calculator)의 기능을 쓰면 

자신이 해야 할 일들이 줄어들기 때문에 할 수 없이

 

엄마 알았어요 저는 엄마가 정의한 run() 도 필요하고 left와 right 도 필요하기 때문에 정의 할께요!

 

라고 하고 있는거에요.

class CalculatorDecoMinus extends Calculator {
    public void sum(){
        System.out.println("- sum :"+(this.left+this.right));
    }
    public void avg(){
        
    }
}

 

이해를 시키려고 위에처럼 말했지만 사실은 Calculator 가 가진 계산 기능을

다른 누군가 필요로 하는 상황이 빈번하게 사용하는경우 사용해요.

공통적인 기능을 여러번 구현하면 중복되는 코드도 많아지고 더러워지고 산으로 가고...

이 부분이 이해 되면 나중에 다시 설명해줄께요. 🤪

 

근데 자세히 보면 이렇게 써있는데 this.left this.right 는

아무리 봐도 CalculatorDecoMinus Class 에서 선언하지 않았는데,,

어떻게 쓰는거 같은지 한번 생각 해봐요!

 System.out.println("- sum :"+(this.left+this.right));

 

아까 Calculator 에서 가지고 있던 변수들 이죠 ?

Calculator 를 상속 받았기 때문에 

Calculator 의 변수들에도 접근하고 자신의 변수처럼 사용할 수 있는거에요!

 

엄마 간식을 내 간식처럼 먹고

엄마 신발을 내 신발처럼 신는 것 처럼 ?

 

 

엄마가 sum 이랑 avg 오버라이드 하지 않으면 안된다고 했으니까 마저 구현해주면

class CalculatorDecoMinus extends Calculator {
    public void sum(){
        System.out.println("- sum :"+(this.left+this.right));
    }
    public void avg(){
        System.out.println("- avg :"+(this.left+this.right)/2);
    }
}

 

그래서 지금 Calculator 를 상속 받은 CalculatorDecoMinus 의 일은 끝이 난거에요.


 

728x90
반응형