자바 중급 개념인터페이스와 추상 클래스동물 공원

Q

error: constructor AbstractAnimal in class AbstractAnimal cannot be applied to given types; 도와주세요..

조회 2564

좋아요 2

2019년 5월 9일

A
2개의 답변이 있어요
커뮤니티 파트너 채택
2019년 5월 9일
2019년 5월 10일

댓글 5

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

(주) 코드잇

대표강영훈

개인정보보호책임자강영훈

이메일support@codeit.kr

사업자 번호313-86-00797

통신판매업제 2019-서울중구-1034 호

주소서울특별시 중구 청계천로 100 시그니쳐타워 동관 10층 코드잇