sunnywolf1010 2008-08-13 08:57
浏览 182
已采纳

请教java继承问题

public class test{

public static void main(String args[]){

A a= new B();

System.out.println(a.var);
System.out.println(a.f());

}

}

class A {

int var =1;

int f(){

return var ;

}

}

class B extends A {

int var =2;

int f(){

return var ;

}

}

请问为什么a.var =1,而a.f()=2。a指向子类对象的引用,调用的方法是子类的方法,为什么调用的成员变量却是父类的,请解惑。谢谢。

[b]问题补充:[/b]
第一次发贴,居然没找到地方可以回复。请指点怎样才能回复自己的帖子。


属性的值取父类还是子类并不取决于我们创建对象的类型,而是取决于我们定义的变量的类型”

我也知道是这样子的,但不知道原因所以就来这问了。

  • 写回答

7条回答 默认 最新

  • aidiyuxin 2008-08-13 09:11
    关注

    [size=medium]不知道楼主对this有了解多少[/size]

    [code="java"]System.out.println(a.var);[/code]
    [size=medium]这个不用说啦吧,是指向父类的引用,所以打印出来的就是父类的var的值[/size]

    [code="java"]System.out.println(a.f());[/code]
    [size=medium]这个虽然类型是A但是,是用B的构造方法初始化的,所以引用指向B
    在B中的方法是这样的[/size]
    [code="java"]int f() {
    return var;
    }[/code]

    改写下会更清晰的
    [code="java"]
    int f() {
    return this.var;
    }[/code]

    [size=medium]其实jvm也是这么做的,因为引用指向的就是子类B所以打印出来的就是B中var的值[/size]

    ps:
    不知道这么说楼主明白否~呵呵,不明白可以短消息我哦~ :o

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?