아핫뉴스실시간 인기검색어
아핫뉴스 화산 이미지
화산 아이콘 11
코스피 5000 돌파
아하

생활

생활꿀팁

정중한상괭이185
정중한상괭이185

자바 생성자 관련 질문드립니다

자바 질문드립니다.

The constructor PhysicalData(String, int, double) is undefined

생성자를 정의하지 않았다고 하는데

위에 분명히 정의해놨는데 왜 이러는지 궁금합니다. 어떻게 고치면 될까요?

2개의 답변이 있어요!
  • 신박한쌍봉낙타189
    신박한쌍봉낙타189

    안녕하세요

    위 생성자를 만드셨는데 기본 생성자를 따로 만드셔야 될 것 같습니다

    클래스명과 같은 생성자로 인자를 아무것도 받지 않는 기본 생성자를 하나 만드셔야 할 것 같습니다.

    그리고 인자로 받는 변수는 원래 클래스에 있는 변수명과 다르게 하는게 좋을 것 같습니다.

    this를 쓴다고 해도 헷갈릴 수 있으니 다르게 하는걸 추천드립니다.

  • 탈퇴한 사용자
    탈퇴한 사용자

    결론부터 설명하면 PhysicalExamination 가 디폴트 패키지에 위치하고 있기 때문에 발생합니다.

    보통 에러나 경고를 나타내는 IDE의 밑줄이 3라인과 50~53 라인에 보이네요.

    50~53 라인의 에러는 말씀하신대로 생성자 PhysicalData(String, int, double) 이 정의를 찾지 못했다는 메시지 입니다.
    하지만 이것은 결과적인 내용이고 실제 원인은 3라인에서 찾아야 합니다.

    일단 import 를 추가하지 않고 아래와 같은 형태로 사용이 가능합니다.

    class PhysicalExamination { static class PhysicalData { } } class Practice { public static void main(String[] args) { PhysicalExamination.PhysicalData[] data = { new PhysicalExamination.PhysicalData() }; } }

    하지만 PhysicalExamination.PhysicalData 이렇게 중첩 클래스로 접근이 번거로울 수 있기 때문에
    이것을 import를 통한 simple name 접근을 할 수 있게 import 로 바꾸었다고 볼 수 있습니다.

    하지만 디폴트 패키지 상에 타입이 존재하기 때문에 아래와 같이 에러가 발생합니다.

    Class 'PhysicalExamination' is in the default package

    따라서 디폴트 패키지에 있는 중첩 클래스 접근은 PhysicalExamination.PhysicalData 를 통한 방법으로 접근해야 합니다.

    만약 PhysicalExamination 타입이 com 이라는 패키지에 있을 경우에는 import를 사용한 접근이 가능합니다.

    package com; import com.PhysicalExamination.PhysicalData; public class PhysicalExamination { static class PhysicalData { } } class Practice { public static void main(String[] args) { PhysicalData[] data = { new PhysicalExamination.PhysicalData() }; } }