自从上次实现new指令之后,我没有马上实现invokespecial指令,因为对于invokespecial指令的理解需要时间。现在基本实现了invokesecial指令,但是在权限检查上遇到一个困难,主要是派生类对于基类protected实例成员(非静态成员)的访问。这个问题暂时忽视了。接着实现了invokevirtual指令,也遇到访问权限方面的疑问。我参考“深入java虚拟机”的一个例子,这个例子测试通过了,如下。
Superclass.java
Subclass.java
用javac编译上述两个java文件,然后编译和运行虚拟机。虚拟机代码参考附件,同样这一次的版本我在visual studio以及cygwin下都编译通过。
Superclass.java
class Superclass {
private void interestingMethod() {
//System.out.println("Superclass's interesting method.");
}
void exampleMethod() {
interestingMethod();
}
}
Subclass.java
class Subclass extends Superclass {
void interestingMethod() {
//System.out.println("Subclass's interesting method.");
}
public static void main(String args[]) {
main();
}
public static void main() {
Subclass me = new Subclass();
me.exampleMethod();
}
}
用javac编译上述两个java文件,然后编译和运行虚拟机。虚拟机代码参考附件,同样这一次的版本我在visual studio以及cygwin下都编译通过。