diff --git a/src/main/java/haidnor/jvm/instruction/references/INVOKEVIRTUAL.java b/src/main/java/haidnor/jvm/instruction/references/INVOKEVIRTUAL.java index b23fd53..281d263 100644 --- a/src/main/java/haidnor/jvm/instruction/references/INVOKEVIRTUAL.java +++ b/src/main/java/haidnor/jvm/instruction/references/INVOKEVIRTUAL.java @@ -87,9 +87,10 @@ public class INVOKEVIRTUAL extends Instruction { javaClass = klass.getJavaClass(); } + // 按照继承关系从下往上找实现的方法 (实现多态) org.apache.bcel.classfile.Method method = getMethod(javaClass, methodSignature, methodName); if (method == null) { - throw new NoSuchMethodException(); + throw new AbstractMethodError(); } KlassMethod klassMethod = new KlassMethod(klass, method); JavaExecutionEngine.callMethod(frame, klassMethod); diff --git a/src/test/java/haidnor/jvm/test/clazz/Baby.java b/src/test/java/haidnor/jvm/test/clazz/Baby.java deleted file mode 100644 index 7deb2ab..0000000 --- a/src/test/java/haidnor/jvm/test/clazz/Baby.java +++ /dev/null @@ -1,7 +0,0 @@ -package haidnor.jvm.test.clazz; - -public class Baby { - public void eat() { - System.out.println("婴儿吃奶粉"); - } -} diff --git a/src/test/java/haidnor/jvm/test/clazz/Human.java b/src/test/java/haidnor/jvm/test/clazz/Human.java new file mode 100644 index 0000000..301fe8e --- /dev/null +++ b/src/test/java/haidnor/jvm/test/clazz/Human.java @@ -0,0 +1,7 @@ +package haidnor.jvm.test.clazz; + +public class Human { + public void eat() { + System.out.println("人类吃饭"); + } +} diff --git a/src/test/java/haidnor/jvm/test/clazz/Person.java b/src/test/java/haidnor/jvm/test/clazz/Person.java deleted file mode 100644 index 195865f..0000000 --- a/src/test/java/haidnor/jvm/test/clazz/Person.java +++ /dev/null @@ -1,7 +0,0 @@ -package haidnor.jvm.test.clazz; - -public interface Person { - - void eat(); - -} diff --git a/src/test/java/haidnor/jvm/test/clazz/Student.java b/src/test/java/haidnor/jvm/test/clazz/Student.java index 98a377e..3c674ef 100644 --- a/src/test/java/haidnor/jvm/test/clazz/Student.java +++ b/src/test/java/haidnor/jvm/test/clazz/Student.java @@ -1,15 +1,5 @@ package haidnor.jvm.test.clazz; -public class Student extends Baby{ - - private int age; - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } +public class Student extends Human { }