当前位置: 代码迷 >> Java相关 >> 请教一个关于对象声明的问题?
  详细解决方案

请教一个关于对象声明的问题?

热度:55   发布时间:2006-11-02 21:08:28.0
请教一个关于对象声明的问题?
class A1
{
public int A1(int a)
{
return a+1;
}
}
class B1 extends A1
{
public int B1(int a)
{ this.a=a;
return a+2;
}
public static void main(String args[])
{
A1 a1=new B1(2);
System.out.println(a1.A1(0));
}
}
编译时出现错误:
symbol :constructor B1(int)
location :class B1
A1 a1=new B1(2);
为什么会错呢?

搜索更多相关的解决方案: int  声明  对象  public  class  

----------------解决方案--------------------------------------------------------
public int A1(int a) //构造方法不能有返回类型
{
return a+1;
}



public int B1(int a) //构造方法不能有返回类型
{ this.a=a;
return a+2;
}

[此贴子已经被作者于2006-11-2 21:42:51编辑过]


----------------解决方案--------------------------------------------------------
错就错在你的父类没有提供默认的构造函数
要改的话
要么你的子类显示的调用一下父类的有参构造函数
要么在你的父类加一个无参构造函数
----------------解决方案--------------------------------------------------------
是加这条语句么super(a)?
----------------解决方案--------------------------------------------------------
好象没用哦?
----------------解决方案--------------------------------------------------------

就是加一个super(a),一个要放在第一句
或者给父类定义一个无参的构造函数


----------------解决方案--------------------------------------------------------
我加了,还是一样的!
class B1 extends A1
{
public int B1(int a)
{ super(a);
return a+2;
}
public static void main(String args[])
{
A1 a1=new B1(2);
System.out.println(a1.A1(0));
}
}

----------------解决方案--------------------------------------------------------
你那什么东西啊,构造函数能有返回值么?
应该是
public B1(int a){
super(a);
}
还有,你的父类
好好学学基础吧
----------------解决方案--------------------------------------------------------

俺的确是在学基础!那为什么去掉A1 a1=new B1(2)里的2又能运行呢?


----------------解决方案--------------------------------------------------------
class Super{
public float getNum(){
return 3.0f;
}
}
public class Sub extends Super{
public void getNum(){
}
}
如果子类中的一个方法与它超类中的方法有相同的方法名和类型声明,称子类中的方法覆盖超类中的方法如果不同,则谓之重载。那么这个例子编译时为什么会出错!
----------------解决方案--------------------------------------------------------
  相关解决方案