java关于继承,构造方法的调用 我的一个继承老是说找不到符号,为什么 问题二 super的用法

class Pets
{
String name;
int age;
boolean isHungry=false;
Pets(String name,int age)
{
this.name=name;
this.age=age;
}
//Pets(){} 子类里加了个构造方法,才通过了编译
void eat()
{
System.out.println("I am hungry !");
isHungry=true;
}
void feed()
{
isHungry=false;
}
}

class Dogs extends Pets
{
Dogs() //如果同时没有这一句和上面注释掉的一句的话
{ //就老是提示找不到符号
super("jack",2);
}
int power=20;
void walk()
{
power--;
}
void feed()
{
power=power+10;
}
}
我想知道为什么会找不到符号??为什么我在父类中定义了一个无参数无操作的构造方法后,或者我在子类里面调用了父类的有参数的构造方法后就可以通过编译??
还有,当我在子类中直接调用父类的构造方法时,直接用super("jack",2); 这样又会出错,当我把这一句放入子类的构造方法里之后又没有错误了,这是为什么??
我想知道super到底怎么用,我知道他可以用来调用父类的成员,要怎么调用呢??
为什么我已开始的super调用出错??

你的父类写了有参构造方法后,你没写无参构造方法,而调用子类构造方法时要调用父类的构造方法,默认的是调用无参构造方法,而你父类中没有无参构造方法,所以报错;
当你在父类写上无参构造方法后,就不会报错了 ;你在子类构造方法里写上父类有的有参构造方法,父类里有 也不会报错,就通过编译了

调用父类的构造方法 只能在子类的构造方法里 ,而且是在子类构造方法的第一行;在其他方法里就会报错了

super 在构造方法里能调用父类的构造方法,只能写在第一行
用法:super(); super(参数列表)
在其他(不包括主方法)里可以调用父类的方法
用法:super.父类的方法名(有参数的参数写在这括号里); super.属性名;
方法名和属性名都是非私有的才能被调用
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-24
因为对初始化的要求是共同的,Java 允许对象在他们被创建时初始化自己。这种自动的初始化是通过使用构造方法来完成的。
构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。
在对象创建时由系统自动调用。
如果程序中未声明,则系统自动产生出一个缺省形式的构造函数。
构造函数是类的一种特殊方法。构造函数的特点主要体现在:
1 构造方法和类具有相同的名字;2 一个类可以有多个构造方法;3 构造方法可以有0、1或者多个参数;4 构造方法没有返回值5 构造方法总是和new运算符一起被调用;6 构造函数必须被声明为公共(public)的类型;
第2个回答  2011-01-24
原因很简单,因为在子类构造方法中 会默认调用父类的无参构造 方法,然后在你写的父类中已经写了Pets(String name,int age)带参构造方法,就没有了缺省的无参构造方法。所以子类在构造方法中会报错,说找不到父类的无参构造方法。解决方法就是在父类中写一个无参构造方法就可以了
第3个回答  2011-01-24
子类继承父类肯定要实现父类的构造方法的,所以你调用会出错
记得父类中有的方法子类中必须有,负责就不叫继承了