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()方法的调用与什么有关?
정적 메서드의 경우 Invokestatic 명령어가 사용되며, 피연산자로 인스턴스 참조가 필요하지 않습니다. 따라서 정적 메서드는 컴파일 타임에 지정됩니다. 인쇄 방법의 일부 단어 섹션 코드:
으아악보시다시피, Invokestatic은 Base.showme이 호출되도록 지정했으므로 인쇄 메소드를 호출하는 방법은 Invokestatic의 동작을 변경하지 않습니다.
게다가 질문자가 정적 바인딩과 동적 바인딩에 대해 잘못 이해하고 있는 것 같습니다. Java, 생성자에서 다형성 메서드 호출
하위 클래스는 상위 클래스의 정적 속성과 정적 메서드를 상속할 수 있지만 정적 메서드를 재정의할 수는 없습니다.
상위 클래스와 동일한 메서드 태그(동일한 메서드 이름, 동일한 매개변수 유형, 동일한 반환 값 유형, 심지어 동일한 액세스 수준)를 갖는 하위 클래스에 메서드 라벨이 있는 경우 이는 상위 클래스의 정적 메서드를 재정의하는 대신 상위 클래스와 동일한 이름을 가진 정적 메서드가 생성됩니다.
@kylewang이 인쇄 방법 부분 바이트코드를 지적했듯이
으아악메소드 호출은 Base.showme()으로 명확하게 지정됩니다