강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

김현석님의 프로필 이미지
김현석

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

업캐스팅 (부모 형태, 자식 생성자)

업캐스팅 문제 예시 8번 관련 다른 문제

해결된 질문

작성

·

28

0

class Car {
   String model;
   int year;

   Car() {
      System.out.println("Car constructor");
   }

   void start() {
      System.out.println(model + " start");
   }

   void stop() {
      System.out.println(model + " stop");
   }
}

class ElectricCar extends Car {
   ElectricCar() {
      System.out.println("ElectricCar constructor");
   }

   void stop() {
      System.out.println(model + " stop and power down");
   }

   void checkBattery() {
      System.out.println(model + " check battery");
   }
}

public class Main {
   public static void main(String[] args) {
      ElectricCar eCar = new ElectricCar();
      eCar.model = "Tesla Model 3";
      eCar.year = 2021;
      eCar.start();
      eCar.stop();
      eCar.checkBattery();
   }
}


위 예제는 다른 예제인데요. checkBattery() { System.out.println(model + " check battery"); } }

이 부분은 부모 클래스에 함께 가지고 있지 않은데 이건 다른건가요?

제가 의심하는걸로는 업캐스팅 문제 예시 8번에 나와있는건 public void고,

저 문제에서는 그냥 void인데 pubilc 유무와 관련이 있을까요?

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요, 해당 코드는 업캐스팅이 아닙니다.

자식 타입에 자식 생성자로 객체를 만들고 있습니다. ElectricCar eCar = new ElectricCar();

 

오로지 자식 클래스의 생성자를 통해 만들어진 자식 객체입니다.

public 유무와 상관없습니다.

public이 있거나 없거나 시험에서는 웬만하면 같은 곳에 파일이 있다는 가정이기 때문에 똑같이 취급하셔도 무방합니다. (같은 패키지에서 유효함)

0

안녕하세요, 인프런 AI 인턴입니다. 김현석님.

질문해주신 내용에 대해 설명드리겠습니다. 언급하신 checkBattery() 메서드는, 부모 클래스인 Car 클래스 내에 정의되어 있지 않고, 오직 ElectricCar 클래스에만 존재하는 메서드입니다. 이에 따라 ElectricCar 클래스의 인스턴스를 사용할 때에만 호출이 가능합니다.

접근 제어자(public 유무)에 대한 설명

  • Public 접근 제어자: 메서드나 변수 앞에 public이 붙으면, 그 메서드나 변수는 어떤 클래스에서든 접근할 수 있습니다. 따라서, 다른 패키지의 클래스에서도 접근 가능합니다.

  • 기본 접근 제어자(패키지 프라이빗, package-private): 접근 제어자가 명시되지 않으면 기본적으로 ‘패키지 프라이빗’으로 간주됩니다. 이는 해당 패키지 내의 클래스에서만 접근 가능하며, 다른 패키지에서는 접근할 수 없습니다.

따라서, checkBattery() 메서드가 public으로 명시되지 않았어도, 같은 패키지 내에서는 접근이 가능하다는 점에서 public 유무와는 상관이 없습니다.

위 코드처럼, ElectricCar 클래스는 Car 클래스의 모든 필드와 메서드를 상속합니다. 그러나 ElectricCar 클래스에서 구현된 고유의 메서드(checkBattery())는 오직 ElectricCar 객체를 통해서만 사용될 수 있습니다.

기존의 유사 질문에 대한 설명과 관련하여 추가적으로 확인하고자 한다면, 다음 질문을 참고하시면 도움이 될 것입니다:

제가 제공한 링크들이 이해를 돕기 위한 참고가 되길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김현석님의 프로필 이미지
김현석

작성한 질문수

질문하기