자바 생성자 관련 질문드립니다
자바 질문드립니다.
The constructor PhysicalData(String, int, double) is undefined
생성자를 정의하지 않았다고 하는데
위에 분명히 정의해놨는데 왜 이러는지 궁금합니다. 어떻게 고치면 될까요?
안녕하세요
위 생성자를 만드셨는데 기본 생성자를 따로 만드셔야 될 것 같습니다
클래스명과 같은 생성자로 인자를 아무것도 받지 않는 기본 생성자를 하나 만드셔야 할 것 같습니다.
그리고 인자로 받는 변수는 원래 클래스에 있는 변수명과 다르게 하는게 좋을 것 같습니다.
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() }; } }