昨晚翻了翻《Core Java2》,发现一个需要注意的要点,就是子类在引用父类的构造方法时,能不能重载父类的构造器?
废话少说,直接上代码测试:
例:
      SuperClass
 1package com.inheritance;
 2
 3public class SuperClass {
 4    public SuperClass(String n,int a){
 5        name = n;
 6        salary =a;
 7    }

 8    private String name;
 9    private int salary;
10    public String getName(){
11        return name;
12    }

13    public int getSalary(){
14        return salary;
15    }

16
17}

18

       ChildClass
 1package com.inheritance;
 2
 3public class ChildClass extends SuperClass{
 4     public ChildClass(String n,int a,int b){
 5         super(n,a);
 6         bonus = b;
 7     }

 8     private int bonus ;
 9     public int getSum(){
10         return bonus +super.getSalary();
11     }

12     public String getName(){
13         return super.getName();
14     }

15}

16

       TestClass
 1package com.inheritance;
 2
 3public class SuperTest {
 4    public  static void main(String[] args){
 5       ChildClass c = new ChildClass("b",20,30);
 6       System.out.println(c.getSum());
 7       System.out.println(c.getName());
 8    }

 9}

10

运行测试类,结果打印子类对象c的name和薪水。
注意:我们的子类ChildClass中的构造方法,它是调用了父类SuperClass的含有n,a参数的构造方法。因为子类ChildClass不能直接访问父类SuperClass的私有值域,可以通过这个super方法对这部分值域初始化。这样父类的值域就被初始化,如name和salary。这样,我们可以看到TestCalss中的第七行输出的c.getName实际上是得到父类SuperClass的name,因为在产生c对象的时候,"b"参数实际上是传递给了父类的私有域name,super隐式调用了SuperClass。这样在TestClass中取c.getName()返回的是super.getName().返回的当然是父类的name。

     另外,构造方法不同于一般的方法。它不能由子类继承。

posted on 2007-12-26 14:05 湘江夜游神 阅读(339) 评论(0)  编辑  收藏 所属分类: JAVA生活

只有注册用户登录后才能发表评论。


网站导航:
 

Locations of visitors to this page