> Java > java지도 시간 > 본문

Java에서 개인 또는 정적 메서드를 재정의할 수 있습니까? 알아야 할 사항은 다음과 같습니다.

WBOY
풀어 주다: 2024-08-31 16:35:33
원래의
1002명이 탐색했습니다.

Can Private or Static Methods Be Overridden in Java? Here’s What You Need to Know

1. Java의 메소드 재정의 이해

프라이빗 및 정적 메서드를 살펴보기 전에 Java의 메서드 재정의에 대한 기본 사항을 이해하는 것이 중요합니다.

1.1 메소드 재정의란 무엇입니까?

메서드 재정의는 하위 클래스가 해당 상위 클래스에 이미 정의된 메서드에 대한 특정 구현을 제공할 때 발생합니다. 이를 통해 하위 클래스는 상위 클래스에서 상속된 메서드의 동작을 사용자 정의할 수 있습니다.

  • 하위 클래스의 메소드는 슈퍼클래스의 메소드와 이름, 반환 유형, 매개변수가 동일해야 합니다.
  • 재정의된 메서드는 슈퍼클래스의 메서드보다 더 제한적인 액세스 한정자를 가질 수 없습니다.
  • 재정의된 메서드는 슈퍼클래스의 메서드보다 더 제한적인 액세스 한정자를 가질 수 없습니다.

예:

class Animal {
    void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Dog barks");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.makeSound(); // Outputs: Dog barks
    }
}
로그인 후 복사

2. 프라이빗 메서드 및 메서드 재정의

비공개 메서드는 자신이 정의된 클래스 외부에서 액세스할 수 없습니다. 따라서 하위 클래스에서 재정의할 수 없습니다. 하위 클래스가 상위 클래스의 전용 메서드와 동일한 이름의 메서드를 정의하는 경우 이는 재정의로 간주되지 않고 하위 클래스에 특정한 새 메서드로 간주됩니다.

2.1 프라이빗 메서드를 재정의할 수 없는 이유

비공개 메서드는 자신의 클래스가 아닌 다른 클래스에서는 숨겨집니다. Java 컴파일러는 전용 메소드를 클래스 계층 구조의 일부가 아닌 해당 메소드가 정의된 클래스의 일부로 처리합니다. 결과적으로 서브클래스는 이러한 메서드에 액세스하거나 재정의할 수 없습니다.

예:

class Parent {
    private void privateMethod() {
        System.out.println("Private method in Parent");
    }
}

class Child extends Parent {
    // This is not an override, but a new method in Child
    private void privateMethod() {
        System.out.println("Private method in Child");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent obj = new Child();
        // obj.privateMethod(); // Compilation error: privateMethod() has private access in Parent
    }
}
로그인 후 복사

2.2 서브클래스의 비공개 메소드에 접근하기

서브클래스는 프라이빗 메서드를 재정의할 수 없지만 동일한 이름을 가진 자체 프라이빗 메서드를 가질 수 있습니다. 이는 슈퍼클래스의 프라이빗 메서드에 영향을 주지 않으며 이름은 같지만 범위가 다른 메서드로 간주됩니다.

3. 정적 메서드 및 메서드 재정의

정적 메서드는 클래스의 인스턴스가 아닌 클래스에 속합니다. 이는 객체 유형이 아닌 참조 유형을 기반으로 컴파일 타임에 해결됩니다. 결과적으로 정적 메서드는 전통적인 의미에서 재정의될 수 없습니다.

3.1 정적 메소드 숨기기

하위 클래스가 슈퍼클래스의 정적 메서드와 동일한 이름의 정적 메서드를 정의하는 경우 이를 재정의가 아닌 정적 메서드 숨기기라고 합니다. 하위 클래스의 메서드는 상위 클래스의 메서드를 숨깁니다.

예:

class Parent {
    static void staticMethod() {
        System.out.println("Static method in Parent");
    }
}

class Child extends Parent {
    static void staticMethod() {
        System.out.println("Static method in Child");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent.staticMethod(); // Outputs: Static method in Parent
        Child.staticMethod(); // Outputs: Static method in Child
    }
}
로그인 후 복사

3.2 정적 메소드 은닉의 의미

정적 메소드 숨기기는 호출되는 메소드가 실제 객체가 아닌 참조 클래스에 의해 결정된다는 의미입니다. 이는 제대로 이해되지 않으면 혼란을 초래할 수 있습니다.

4. 결론

요약하자면, Java의 비공개 메소드는 자체 클래스 외부에서는 액세스할 수 없기 때문에 재정의될 수 없습니다. 정적 메서드도 재정의할 수 없지만 하위 클래스에 숨길 수는 있습니다. 이러한 규칙을 이해하는 것은 Java의 효과적인 객체 지향 프로그래밍에 중요합니다.

Java의 메서드 재정의, 개인 메서드 또는 정적 메서드에 대해 질문이 있거나 추가 설명이 필요한 경우 아래에 자유롭게 의견을 남겨주세요!

에서 더 많은 게시물을 읽어보세요. Java에서 비공개 또는 정적 메서드를 재정의할 수 있나요? 알아야 할 사항은 다음과 같습니다

위 내용은 Java에서 개인 또는 정적 메서드를 재정의할 수 있습니까? 알아야 할 사항은 다음과 같습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿