실제 세계에서 부모님이 자식들에게 재산을 물려주는 것과 비슷하다. 차이라고 하면 자식(클래스)이 상속받고 싶은 부모(클래스)를 선택해서 물려받는다. 이때 상속받는 클래스를 자식 클래스, 하위 클래스 또는 서브 클래스라고 부른다. 상속을 해주는 클래스를 부모 클래스, 상위 클래스 또는 슈퍼 클래스라고 한다.
-클래스 간에는 부모-자식의 상속 관계를 설정할 수 있다.
-부모 클래스 A를 자식 클래스 B가 상속받을때, B는 A의 모든 멤버변수와 메서드를 자신의 것으로 상속받게 된다. (단, private로 설정된 기능은 상속되지 않는다.)
-상속가능 여부: public, protected
-B는 A의 public,protected 기능들을 직접적으로 코딩하지 않더라도 자신의 것으로 사용할 수 있게 된다.
풀어서 예시로 설명해보면,
A B라는 클래스가 있을 때
A는 PLUS, MINUS를 상속받고
B는 PLUS,MINUS를 받고
TIMES를 추가. 기존 완성된 A클래스에 추가하는 건 개발자에게 부담이 될 수 있다.
//TIMES 그래서 B클래스에 상속받아 추가
이것은 부모클래스인 CalcParent
이것이 자식 클래스인 CalcChild이다. 사진에서 볼 수 있듯 extends를 이용해 CalcParent를 상속받은 모습을 확인 할 수 있다. 결국 현재 자식 클래스는 부모 클래스에서 받은 +,-를 가지고 times를 이용한 곱하기, divide나누기 까지 가지고 있다. 위의 예시에서 말했듯 두 개는 받고 두 개는 추가하였는데, 그 예시가 이것이다. 이렇게 하면 개발자의 부담이 줄어들 수 있다.
이러한 상속은
CalcChild,CalcParent와는 다르게 그림으로 표현하면
이런 모양의 class라고 할 수 있겠다.
A라는 큰 클래스가 존재하고 그 밑에 하위 클래스 두 개가 A의 클래스를 공유하는 것이다.
override는 쉽게 말해 상속 관계인 부모 클래스와 자식 클래스 사이에서 부모 클래스의 메서드를 똑같이 가져와 사용하는 것이다.
코드를 가져와서 설명해야 와닿을 것 같다.
이것이 부모 클래스인 unit
하위 클래스인 Navy
하위 클래스인 army이다.
두 코드를 보면 부모 클래스가 attack이라는 이름을 사용하고 있는데, 자식 클래스인 Army와
Navy또한 attack을 사용하고 있다. 하지만 Army와 Navy는 각각 지상 공격 실행,해상공격 실행으로 다른 형태를 취한다. 이것이 override이다. 같은 메서드를 가져왔지만 취하는 결과는 다른 것이다.
오버로드의 예시
파라미터의 데이터형이 서로 다르기 때문에 오버로드 성립
public void foor(int a){...}
public void foor(String a){...}
파라미터의 개수가 서로 다르기 때문에 오버로드 성립
public void user(int a){...}
public void user(int a, int b){...}
데이터형의 전달 순서가 서로 다르기 때문에 오버로드 성립
public void user(int a, String b){...}
public void user(String a, int b){...}
오버로드 성립되지 않음
public void user(int a){...}
public void user(int b){...}