class A {
public int i = 10;
}
class B extends A{
public int i = 20;
}
public class Test{
public static void main(String args[]){
B b = new B();
A a = b;
System.out.println(b.i);
System.out.println(a.i);
}
}
第一个很简单 因为变量是没有什么Override的,那是方法才有的东西。
b 引用本身是B,所以使用的是B里面的属性
a 引用虽然指向了b,但自身是A,所以使用的是A里面的属性
class A {
private int i = 10;
public void printI() {
System.out.println(i);
}
}
class B extends A {
private int i = 20;
}
public class Test {
public static void main(String args[]) {
B b = new B();
A a = b;
b.printI();
a.printI();
}
}
因为属性是没有Override的,所以方法运行时,是哪个类就是哪个类的属性。
所以类B里,使用的是继承过来的A的方法,所以运行时使用的也是A里面的属性。
class A {
private int i = 10;
public void printI() {
System.out.println(i);
}
}
class B extends A {
private int i = 20;
public void printI() {
System.out.println(i);
}
}
public class Test {
public static void main(String args[]) {
B b = new B();
A a = b;
b.printI();
a.printI();
}
}
a和b指向的都是类B,而方法被Override了,所以运行时他们调用的都是B里面的方法。
所以他们使用的属性也都是B类里面的属性。
转载于:https://www.cnblogs.com/bianshencho/archive/2009/09/27/1574821.html