안녕하세요, 우선 서브클래스의 생성자는 항상 `super()`를 호출합니다. 코드에 `super(...)`를 써주시면 슈퍼클래스의 매칭되는 생성자를 호출하고 위 코드같이 `super(...)` 호출이 따로 없으면 자동으로 parameter없는 `super()`를 호출합니다. 하지만 그런 생성자는 정의되지 않았기 때문에 에러가 뜹니다 - 해결 방법은 랑이님 말씀대로 `super(name)`을 호출하시는게 제일 좋아 보입니다. `super()`는 평범한 함수라고 생각하시면 좋을 것 같습니다. `Cat`생성자 안에서 이름을 정해주고 싶은 것이기 때문에 `AbstractAnimal(name)`함수를 사용하시면 됩니다, 단지 문법상 `super(name)`이라고 쓰셔야 합니다. `name`변수 같은 경우 말씀하신대로 슈퍼클래스의 `name`을 상속받기 때문에 서브클래스에서 따로 선언 하지 않으셔도 됩니다 (오히려 선언을 하시면 똑같은 이름을 가진 변수가 2개 존재합니다)
+0
2019년 5월 10일
슈퍼클래스와 서브클래스가 만들어질 경우 서브클래스의 생성자는 super로 호출하고 슈퍼클래스 생성자의 파라미터에 따라 super를 사용할때 파라미터를 적을지 안적을지로 알고 있으면 되겠네요!!! 그리고 슈퍼클래스에서 변수를 선언할 경우 서브클래스에서는 변수를 따로 선언하지 않는다 (하는 경우 같은 이름의 변수 여러개가 존재하게 된다) 개념이 좀 더 명확하게 와닿네요 친절한 답변 감사드립니다 ㅎㅎ
+0
2019년 5월 10일
네 서브클래스는 슈퍼클래스를 확장(?)하는 개념이기때문에 항상 먼저 슈퍼클래스 오브젝트를 `super`를 통해 생성합니다. 이것을 생각히시면서 적절히 `super(...)`를 사용하시면 될 것 같습니다. 변수 같은 경우 당연히 `Cat`들만 가지고 있는 변수가 있을 수 있습니다 - 이런 경우는 `Cat`클래스에서 변수를 선언하시면 되지만 `AbstractAnimal`에 있는 변수들은 어차피 상속을 받기 때문에 `Cat`에서 따로 선언해주실 필요가 없습니다^^
+0
2019년 5월 11일
개념이 확실히 잡히네요 :D 친절한 답변 감사드립니다 ㅎㅎ
+0
2019년 7월 1일
수퍼(부모)클래스에서 변수를 선언할 경우 서브(자식)클래스에서 변수를 따로 선언하지 않는다는 개념이 아니고, 서브클래스에서 공통적으로 사용되는 변수나 메소드를 상위 추상클래스로 구현하는 겁니다. 선후개념을 잘못 알고 있습니다.
댓글 5개