class SrInherit1
{
int x,y;
SrInherit1(int a,int b)
{
x=a;y=b;
}
}
class SrInherit2 extends SrInherit1
{
SrInherit2(int a,int b)
{
super(a,b);  //这里我的理解,super不用,父类的构造应该自动被继承才对!!
}
}
public class SrInherit
{
public static void main(String args[])
{
int sum;
SrInherit2 Srv=new SrInherit2(40,80);
sum=Srv.x+Srv.y;
System.out.println("Sum="+sum);
}
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【sure2003】截止到2008-06-26 09:39:51的历史汇总数据(不包括此帖):
    发帖数:182                发帖分:8656               
    结贴数:180                结贴分:8606               
    未结数:2                  未结分:50                 
    结贴率:98.90 %            结分率:99.42 %            
    值得尊敬
      

  2.   

    如果父类的构造函数不是默认的构造函数  (也就是父类的构造函数里带参数)子类构造函数里的第一行  就必须写super(a,b)等等  否则就会报错因为子类构造函数里  隐含着super()  
      

  3.   

    子类构造函数里都隐含着super()如父类的构造函数有参数  子类构造函数里的第一句 就必须特别声明super(a,b)不写的话  因为自动隐含super()  但父类却没这样的构造函数  所以会报错的
      

  4.   

    如果父类只有不带参数的构造函数,或者没写构造函数,那么的确不用写super
    java在实例化子类的时候,会自动调用父类的默认构造函数来构造但是现在你的父类是一个带参数的构造函数,java无法调用这个带参数的构造函数,
    那么,就必须在子类里显式地调用
      

  5.   

    还不是很理解......
    super()
    super(参数)
    有什么区别??
      

  6.   

    因为你写了有参的父类构造 所以父类默认的无参构造已经消失
    当你不写spuer(a,b);时默认调用的是父类无参的构造
      

  7.   


    补充一点,构造函数是不能继承的,默认的super()可以不写,但是如果你父类没有这个无参构造函数的话就会报错。所以一般需要显示调用。你理解super其实就是代表父对象就好了。
      

  8.   

    当些super();和没写一样 默认调的就是它父类的无参构造
    当写super(参);调的时父类有参  应该能懂了吧 
      

  9.   

    无参构造 你可以理解成 SrInherit1() {//空构造 }   就是根本不写构造函数时  自身隐含的但只要你自己写了 SrInherit1() { //构造内容}或 SrInherit1(int a,int b){ x=a;y=b;}那么默认的无参构造函数就不存在了
    class SrInherit1
    {
        /*SrInherit1()
        {
           
        }*/
    }
    class SrInherit2 extends SrInherit1
    {
        /*SrInherit2()
        {
            super();     //隐含的    
        }*/
    }
      //你要是建个类  不写构造函数的话  里面应该都隐含无参的默认构造函数  注释里面的都为无参的默认构造函数
      

  10.   

    当你另外写了一个带参数的构造方法时,系统就不会自动为你生成无参的构造方法了。
    如:
    public class Test {
    Test(int a,int b){}
    public static void main(String [] args){
    new Test();
    }
    }
    系统一定会报错,但如果你把Test(int a,int b){}注释掉的话就不会报错了。
    另外,构造方法不能被继承。
      

  11.   


    是自动继承没错,不过要是继承的话没有参数怎么办呢,就靠super(a,b)传给父类
      

  12.   

    这位老兄出的题都很锻炼JAVA基础啊,值得尊敬----引用老紫竹马甲
      

  13.   

    1. 如果编译时编译器发现你的类没有写构造方法,它会帮你加上个 public YourClassName() {super();}。
    2. 一旦你给你的类写了个构造方法,哪怕它不是 public 无参的,编译器都不会再帮你加构造方法了。
    3. 所以你写的类不一定都有公有无参的构造方法。