Rss & SiteMap

课外天地 李树青 http://www.njcie.com

李树青 论坛 南京 财经 课外天地
共2 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

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

1楼
信管07151 发表于: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编辑过]
2楼
admin 发表于: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编辑过]
共2 条记录, 每页显示 10 条, 页签: [1]

Copyright ©2002 - 2016 课外天地.Net
Powered By Dvbbs Version 8.3.0
Processed in .03125 s, 2 queries.