动态绑定机制
//测试类 public class Dynamic { public static void main(String[] args) { A a = new B(); System.out.println(a.sum()); System.out.println(a.sum1()); } }
class A { public int i = 10; public int sum() { return getI() + 10; } public int sum1() { return i + 10; } public int getI() { return i; } } class B extends A { public int i = 20; @Override public int sum() { return i + 20; } @Override public int sum1() { return i + 10; } @Override public int getI() { return i; } }
运行结果如下
class A { public int i = 10; public int sum() { return getI() + 10;//此时的getI()调用的是对象运行类型的i } public int sum1() { return i + 10; } public int getI() { return i; } } class B extends A { public int i = 20; // @Override // public int sum() { // return i + 20; // } @Override public int sum1() { return i + 10; } @Override public int getI() { return i;//调用了本类的i并传给上面的getI() } }
运行结果如下
class A { public int i = 10; public int sum() { return getI() + 10; } public int sum1() { return i + 10;//这里调用的是本类的i } public int getI() { return i; } } class B extends A { public int i = 20; // @Override // public int sum() { // return i + 20; // } // @Override // public int sum1() { // return i + 10; // } @Override public int getI() { return i; } }
运行结果如下