所谓的静态绑定就是说:变量声明的类型就是实际的类型,因此,a.i获取到的是A里面的i,b.i获取到的是B里面的i。public class Test { static class A { public int i = 10; public int getI(){ return this.i; } } static class B extends A { public int i = 20; public int getI(){ return this.i; } } public static void main(String args[]) { B b = new B(); A a = b; System.out.println(b.i);//20 System.out.println(a.i);//10 System.out.println(b.getI());//20 System.out.println(a.getI());//20 方法才会有多态 } }
field只有静态绑定,不存在多台这个说法。
static class A {
public int i = 10;
public int getI(){
return this.i;
}
}
static class B extends A {
public int i = 20;
public int getI(){
return this.i;
}
}
public static void main(String args[]) {
B b = new B();
A a = b;
System.out.println(b.i);//20
System.out.println(a.i);//10
System.out.println(b.getI());//20
System.out.println(a.getI());//20 方法才会有多态
}
}
但static和final(所有private默认是final的)修饰的方法也是静态绑定的.
public class test{
public int i=10;
public int i=20;
}
不就相当于这样吗 这样显然是不行的啊