상속에 대해 이해한 내용을 적어보도록 하겠습니다.
상속이란 말그대로 부모클래스의 멤버를 자식클래스가 받아 사용하는 것을 말한다.
예를 들어 부모클래스에 int a 라는 필드와 print() 라는 a 를 출력하는 메서드가 있고 이러한 부모클래스를 상속받은 자식클래스가 있다고 하면 자식클래스는 부모 클래스에 있는 int a와 print를 사용할 수 있다.
부모 클래스에 해당하는 InheritancMain
자식 클래스에 해당하는 Inheritanc
여기서 부모클래스 멤버를 상속 받기 위해선 자식클래스에 exrends + 부모클래스명을 입력 해주어야 한다는것을 볼 수 있다.
다음으로 자시클래스가 부모클래스의 멤버를 잘 상속 받았는지 확인해 보자
예시와 같이 자식클래스로 참조변수를 생성후 객채를 생성하여 자식클래스에는 없는 a를 출력하는 print()를 사용해보고 자식클래스에 있는 b를 출력하는 print2()를 사용해 본다.
결과는 위와같이 모두 출력이 되고 상속이 잘 이루어진것을 확인 할 수 있다.
다음 으로 상속의 포홤관계에 알아보자
상속은 상속관계와 포함관계로 나누는데 둘의 차이점은 상속관계를 Is - a (""~은 ~(이)다"") 이고 포함관계는 Has - a ("~은 ~을(를) 가지고 있다")이다.
위의 내용을 처음 접하면 무엇인지 잘 모르지만 예시를 들어보면 금방 이해할 수 있다.
자동차로 예를 들어보면 자동차의 종류는 많다 SUV, 승용차, 스포츠카 와 같이
하지만 SUV도 자동차고 승요차도 자동차고 스포츠카도 자동차다.
즉 Is - a 와같이 SUV는 자동차이다로 큰것에 작은 것이 속하는 것과 같다.
반대로 포함관계를 살펴보면 SUV, 승용차, 스포크카의 대분류 인 자동차는 공통적으로 무엇을 갖고 있을까?
바로 바퀴, 문, 창문 등 부품을 가지고 있다 이 부붐들은 하나만 있으면 그냥 부품일 뿐이지만 모이면 자동차가 된다.
이렇듯 부품과 완성품 이러한 관계를 포함 관계라고 이해 하면 될것 같다.
게산기로 예를 들어보면 계산기의 기능인 +, -, / 등과 같은 기능을은 계산기에 포함되는 기능이다.
위화같이 어떠한 것에 종류가 아님 포함되는 부품과 같은거라면 포함 관계가 아닐까 싶다.
여기서 중요한 점은 상속관계와 포함관계를 사용하는 법이 다르다른 것이다.
이부분 부터는 글쓴이가 이해한 내용을 적어보는 것으로 확답은 아니란것을 알린다.
상속관계는 exrends를 사용해서 상속을 하고 포함관계에선 exrends를 사용하지 않고 부모 생성자에 자식 생성자를 서언하는 방식으로 상속을 사용 하는것 같다.
이 내용 관련해서는 좀더 이해 후 수정하도록 하겠다.
상속에서 또 알아야 할점은 JAVA는 다중 상속을 허용하지 않는다는 것이다.
한마디로 exrends를 두번 사용하면 안된다는것이다.
그 이유는 상속을 해주는 부모클래스의 이름이 같을 수도 있고 부모클래스에서 상속받는 멤버들의 이름이 겹칠 수도 있는 복잡한 상황을 피하기 위해서 인것 같다.
마지막으로 상속에서 부모클래에서 Final 키워드를 지정하여 선언하면 자식클래스에서는 사용할 수 없다.
부모클래스에서 Final 키워드를 지정하여 선언하면 최종적인 클래스가 됨으로 더이상 상속 할 수 없는 클래스가 되기 때문이다.
오버라이딩은 상속받은 부모클래스의 메서드를 자식클래스에서 재정의해서 사용할 수 있는것을 말한다.
앞서 보여주었던 자식 클래스에서 부모클래스에 있던 print()의 내용을 bb를 출력하게 바꾼후 Main에서 출력해보면 다음과 같은 결과를 볼 수 있다.
처음엔 a를 출력하던 print() 가 이제는 bb를 출력하는것을 확인할 수 있다.
상속은 코드의 재사용에있어 많이 중요한 JAVA의 기능인것 같다.
포함관계에 있어선 좀더 자세한 이해가 필요하지만 상속을 잘 다루게 된다면 시스템 개발에 있어 많은 도움이 될것같다.