Topic: 求助,关于java构造函数与继承的编译错误

  Print this page

1.求助,关于java构造函数与继承的编译错误 Copy to clipboard
Posted by: maxterry
Posted on: 2006-01-29 18:12

下面程序编译通不过,请高手指教

//关于java构造函数与继承的理解
class SrInherit1
{
  int x,y;
  SrInherit1(int a,int b)
  {
    x=a;
    y=b;
  }
}
class SrInherit2 extends SrInherit1
{
  SrInherit2(int a,int b)
  {
    x=a+3;
    y=b+7;
    //super(a,b); 编译可通过
  }
}
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);
  }
}

2.Re:求助,关于java构造函数与继承的编译错误 [Re: maxterry] Copy to clipboard
Posted by: why
Posted on: 2006-01-29 20:18

I think you mean:

SrInherit2(int a,int b)
{
//super(a,b); //编译可通过, super call must be the first statement in a constructor
x=a+3;
y=b+7;
}


假如沒有這句,那就等如有一句隱藏的super();可是SrInherit1沒有default constructor,所以"编译错误"

javac 的错误信息沒指出這點嗎?

3.Re:求助,关于java构造函数与继承的编译错误 [Re: maxterry] Copy to clipboard
Posted by: maxterry
Posted on: 2006-01-29 21:29

javac 的错误信息指出SrInherit1构造函数错误,不解?
为什么子类继承父类构造函数(super())可以,但子类创造自己的构造函数则会出错???

父类有自己的构造函数,
那继承该父类的子类想要有自己的构造函数
(而不是用super()继承父类构造函数)

那么以上代码该这么修改才正确呢,请“元老”指点~~


=====编译错误实例====[子类创造自己的构造函数]====
class SrInherit1
{
int x,y;
SrInherit1(int a,int b)
{
x=a;
y=b;
}
}
class SrInherit2 extends SrInherit1
{
SrInherit2(int a,int b)
{
x=a+3;
y=b+7;
}
}
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);
}
}

=====编译可通过实例=====[子类继承父类构造函数]===
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);
}
}
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);
}
}


Please use [ code ] tag to format code listing in the future.

4.Re:求助,关于java构造函数与继承的编译错误 [Re: maxterry] Copy to clipboard
Posted by: why
Posted on: 2006-01-29 21:49

maxterry wrote:
javac 的错误信息指出SrInherit1构造函数错误,不解?
为什么子类继承父类构造函数(super())可以,但子类创造自己的构造函数则会出错???

父类有自己的构造函数,
那继承该父类的子类想要有自己的构造函数
(而不是用super()继承父类构造函数)

敝人前面說:假如沒有這句,那就等如有一句隱藏的super();可是SrInherit1沒有default constructor,所以"编译错误"
意思是

SrInherit2(int a,int b)
{
x=a+3;
y=b+7;
}

等如

SrInherit2(int a,int b)
{
super(); // the compiler adds this
x=a+3;
y=b+7;
}


可是SrInherit1沒有default constructor
SrInherit1() { }
卻有
SrInherit1(int a,int b) { ... }

那麼 compiler 不會自動補入 SrInherit1() { super(); }
於是”指出SrInherit1构造函数错误”

解決方法之一不就是自已補充這個
SrInherit1() { }

5.Re:求助,关于java构造函数与继承的编译错误 [Re: maxterry] Copy to clipboard
Posted by: maxterry
Posted on: 2006-01-30 11:18

多谢why 指点,我完全明白了,谢谢了,今后还请多多指教!!


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923