标题: 关于继承中的赋值问题 [打印本页] 作者: yan 时间: 2013-8-11 19:32 标题: 关于继承中的赋值问题 本帖最后由 yan 于 2013-8-13 22:36 编辑
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);
}
打印结果是20 10
但是不是b的地址赋给了a 指向同一个引用 那么a和b 应该是同一个值才对啊?如图
作者: 会飞的狼 时间: 2013-8-11 19:41
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; 这句话是多态,相当于:A a = new B();虽然a保存了b的地址引用,new B()这个对戏那个中有两个i,地址是不一样的,a指向不到b中的i,还是A得i
System.out.println(b.i);
System.out.println(a.i);
}作者: 如果我长大了。 时间: 2013-8-11 20:22
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);
}
我给你分析一下答案吧。
B b = new B();//这句话你能理解吧。b.i = 20;
但是 A a = b; //这句话是父类引用指向了子类的对象。但是,对于成员变量i,a只能看到在自己的范围内定义的。它看不到子类中的i。所以你打印的b.i = 10;
作者: 兜兜转转 时间: 2013-8-13 09:20
如楼上哥们所说,父类的引用指向了子类的对象,父类中的对象访问不到子类的成员变量,两外给你总结几点规律如下:
1: 只要子类定义了与父类一样的方法,调用的永远是被子类重写的方法。
2:非静态的方法与等号右边的对象方法绑定。
3: 静态方法与引用类型的方法绑定,也就是等号左边的绑定。
4: 静态和非静态成员变量与引用类型绑定,也就是等号左边的绑定。作者: 付龙 时间: 2013-8-13 11:30
B b = new B();
A a = b; //A a=new B();
多态,父类引用指向子类对象。该引用只能调用父类中定义的方法和变量
这个引用不是真的把b的地址值给了a,见图