课外天地 李树青学习天地清心茶舍 → [求助]类的继承问题


  共有19066人关注过本帖树形打印复制链接

主题:[求助]类的继承问题

帅哥哟,离线,有人找我吗?
信管07151
  1楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:7 积分:231 威望:0 精华:0 注册:2009/10/31 18:08:33
[求助]类的继承问题  发帖心情 Post By:2010/4/9 12:45:10 [只看该作者]

class  Foo{
    public int a;
    public Foo(){
        a=3;
    }
    public void addFive(){
        a+=5;
    }
}
class Bar extends Foo{
    public int a;
    public Bar(){
        a=8;
    }

    public void addFive(){
         this.a+=5;
    }
}
public class Test2 {
  public static void main(String[] args){
      Foo  f = new Bar();
     f.addFive();
      System.out.println(f.a);
  }
}

为什么输出地是3?怎样理解Foo  f=new  Bar()?

[此贴子已经被admin于2010-12-13 20:19:05编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
admin
  2楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1939 积分:26594 威望:0 精华:34 注册:2003/12/30 16:34:32
回复  发帖心情 Post By:2010/4/10 14:11:50 [只看该作者]

Bar继承Foo,Bar中有两个a,一个继承来的,一个自己定义的;Bar中有两个addFive,一个继承来的,一个自己定义的

Foo f = new Bar();语法是可以的,因为子类对象可以看成是父类对象,因此被父类引用变量指向,但是此时如果调用addFive,默认调用子类自己的addFive,此乃多态;而调用变量a,则默认还是继承来的a,所以是3。

你可以试一试下面的代码,看看输出就知道原因了:

class Foo {
        public int a;

        public Foo() {
                a = 3;
        }

        public void addFive() {
                System.out.println("Foo's a is " + a);
                a += 5;
        }
}

class Bar extends Foo {
        public int a;

        public Bar() {
                a = 8;
        }

        public void addFive() {
                System.out.println("Bar's a is " + a + ":Foo's a is " + super.a);
                this.a += 5;
        }
}

public class Exec {
        public static void main(String[] args) {
                Foo f = new Bar();
                f.addFive();
                System.out.println(f.a);
        }
}


 

[此贴子已经被作者于2010-12-13 20:19:22编辑过]

 回到顶部