강의

멘토링

로드맵

Inflearn brand logo image

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

주무세요님의 프로필 이미지
주무세요

작성한 질문수

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

Java: 상속을 정리하는 문제 10개

부모 클래스의 메서드 상속 관련 질문2

해결된 질문

작성

·

78

0

18:41

 

유형 8에서는 업캐스팅 형태일때, 메소드를
부모: static void display()
자식: static void display()
위와 같이 선언하여야 하며, 부모 메소드에서 static을 없애면 에러가 난다고 하셨습니다.

그렇다면 만약,
유형 9와 같이 업캐스팅 형태가 아니고,
Child obj = new Child(); 로 인스턴스를 생성하였는데,
부모: static void display()
자식: void display()
와 같은 형태로 메소드가 구성되어 있다면
obj.display()를 했을때, 에러가 발생하나요?

 

자식에도 static이 있어야지 상속이 가능하다는 부분이 업캐스팅일때만 적용되는건지, 업캐스팅이 아니어도 동일하게 적용되는건지 궁금합니다.

답변 2

1

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

네 오류 발생합니다. 아래와 같이 말씀하시는 것이죠?

 

public class TestInheritance {
    public static void main(String[] args) {
        Child obj = new Child();
        obj.display();
    }
}


class Parent {
    static void display() {
        System.out.println("Parent display");
    }
}

class Child extends Parent {
    void display() {
        super.display();
        System.out.println("Child display");
    }
}

 

정적 메서드는 클래스 자체로 사용하는 것이고, 인스턴스 메서드는 해당 객체가 사용하는 메서드입니다.

정적 메서드를 상속 받았는데 인스턴스 메서드처럼 사용하면 오류 발생합니다.

 

출력문:

ERROR!

/tmp/VyVZtZAfH2/Main.java:16: error: display() in Child cannot override display() in Parent

void display() {

^

overridden method is static

1 error

ERROR!

error: compilation failed

주무세요님의 프로필 이미지
주무세요
질문자

위의 AI 답변에서는 에러가 발생하지 않고 실행 가능하다고 되어 있어서, 그렇게 이해하고 넘어갈 뻔했습니다.

 

하마터면 잘못 이해하고 넘어갈 뻔했네요.

끝까지 답변 잘 달아주셔서 감사드립니다.

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

AI 답변 너무 믿으시면 안됩니다..

-1

안녕하세요, 인프런 AI 인턴입니다. 주무세요님.

말씀하신 내용은 Java의 메서드 오버로딩 및 오버라이딩과 관련된 중요한 개념들입니다. Java에서 static 메서드와 인스턴스 메서드의 차이점에 대해 설명드리겠습니다.

  1. 업캐스팅에서의 메서드 접근:

    • 업캐스팅 상황에서 static 메서드와 인스턴스 메서드는 다르게 동작합니다. static 메서드는 참조 타입에 따라 호출되며, 실제 객체에 의해 결정되지 않습니다. 따라서 static 메서드가 업캐스팅 시 오버라이딩되는 것이 아니라 숨김(hiding)이 발생합니다.
  2. Child obj = new Child();의 경우:

    • 말한대로 자식 클래스에서 void display()처럼 인스턴스 메서드로 정의하고, 부모 클래스에는 static void display()로 정의되었다면, obj.display()를 호출 시 에러가 발생하지 않습니다.
    • 두 메서드는 static 여부가 다르기 때문에 서로 다른 메서드로 취급됩니다.
    • 부모 클래스의 static 메서드는 오버라이딩이 되지 않으며, 자식의 인스턴스 메서드를 호출하게 됩니다.

따라서, 업캐스팅 여부에 관계없이 static 함수는 상속되는 것이 아니라 메서드 숨김이 발생하며, 각자의 Invoking class 타입에 따라 호출됩니다.

관련된 더 깊이 있는 설명을 확인하고 싶으시다면 아래의 유사한 기존 답변을 참고하시길 바랍니다:

이해가 되셨길 바라며, 질문에 대한 궁금증이 풀리셨기를 바랍니다. 저 역시 질문자님의 이해를 돕기 위해 최선을 다하고 있으며, 현재 베타 기능으로 인해 다소 부족함이 있을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면 언제든지 질문해 주세요. 지식공유자께서 빠르게 답변을 드릴 것입니다.

주무세요님의 프로필 이미지
주무세요

작성한 질문수

질문하기