찾다

 >  Q&A  >  본문

关于java中继承静态方法的问题

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()方法的调用与什么有关?

PHPzPHPz2916일 전524

모든 응답(3)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-18 09:44:18

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

    으아악

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

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

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 09:44:18

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

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 09:44:18

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

    으아악

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

    회신하다
    0
  • 취소회신하다