关于java中继承静态方法的问题
PHPz
PHPz 2017-04-18 09:42:18
0
3
513

Base父类代码如下

public class Base {
    public static String showme(){
        return "Base";
    }

    public void print(){
        System.out.println(showme());
    }

}

Sub子类代码如下

public class Sub extends Base {
    public static String showme(){
        return "Sub";
    }
 }
 

main函数如下

public class AppMain {
    public static void main(String args[]){
        Base base=new Sub();
        base.print();

        Sub sub=new Sub();
        sub.print();
        }
}

打印结果两个都为Base

请问怎样解释在print方法中showme()方法的调用与什么有关?

PHPz
PHPz

学习是最好的投资!

모든 응답(3)
左手右手慢动作

정적 메서드의 경우 Invokestatic 명령어가 사용되며, 피연산자로 인스턴스 참조가 필요하지 않습니다. 따라서 정적 메서드는 컴파일 타임에 지정됩니다. 인쇄 방법의 일부 단어 섹션 코드:

으아악

보시다시피, Invokestatic은 Base.showme이 호출되도록 지정했으므로 인쇄 메소드를 호출하는 방법은 Invokestatic의 동작을 변경하지 않습니다.

게다가 질문자가 정적 바인딩과 동적 바인딩에 대해 잘못 이해하고 있는 것 같습니다. Java, 생성자에서 다형성 메서드 호출

刘奇

하위 클래스는 상위 클래스의 정적 속성과 정적 메서드를 상속할 수 있지만 정적 메서드를 재정의할 수는 없습니다.
상위 클래스와 동일한 메서드 태그(동일한 메서드 이름, 동일한 매개변수 유형, 동일한 반환 값 유형, 심지어 동일한 액세스 수준)를 갖는 하위 클래스에 메서드 라벨이 있는 경우 이는 상위 클래스의 정적 메서드를 재정의하는 대신 상위 클래스와 동일한 이름을 가진 정적 메서드가 생성됩니다.

Ty80

@kylewang이 인쇄 방법 부분 바이트코드를 지적했듯이

으아악

메소드 호출은 Base.showme()으로 명확하게 지정됩니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿