class Footballteam
{
int age,heigth,weight;
char sex;
public Footballteam(int age,char sex,int height,int weight){
this.age=age;
this.sex=sex;
this.heigth=heigth;
this.weight=weight;
}
}class Member1 extends Footballteam
{
String name;
public Member1(){super(23,'M',173,140);};
public Member1(String name){this.name=name;};
}class Captain extends Member1
{
public Captain(){super();};
}class B
{
public static void main(String[] args){
Member1 c1=new Member1();
System.out.println(c1.age);
}
}在第18行this处显示错误
{
int age,heigth,weight;
char sex;
public Footballteam(int age,char sex,int height,int weight){
this.age=age;
this.sex=sex;
this.heigth=heigth;
this.weight=weight;
}
}class Member1 extends Footballteam
{
String name;
public Member1(){super(23,'M',173,140);};
public Member1(String name){this.name=name;};
}class Captain extends Member1
{
public Captain(){super();};
}class B
{
public static void main(String[] args){
Member1 c1=new Member1();
System.out.println(c1.age);
}
}在第18行this处显示错误
由于父类没有默认的构造方法
所以你这个构造方法必须制定的方式来调用父类的构造方法
你可以调用super父类构造方法 像
public Member1(){super(23,'M',173,140);};
或者也可以添加 this();
调用另外一个构造方法来来初始化父类
int age,heigth,weight;
char sex; public Footballteam(){} public Footballteam(int age,char sex,int heighth,int weight){
this.age=age;
this.sex=sex;
this.heigth=heighth; //这里修改
this.weight=weight;
}}class Member1 extends Footballteam
{
String name;
public Member1(){
super(23,'M',173,140);
}
public Member1(String name){
this.name=name;
}
}class Captain extends Member1{
public Captain(){
super();
}}public class B{
public static void main(String[] args){ Member1 c1=new Member1();
System.out.println(c1.age); }
}
public Member1(String name) {
// super();
super(1, 'a', 11, 22);
this.name = name;
}
……
[/Quote]额。。还是不明白啊,
public Member1(){
super(23,'M',173,140);
}这个不是已经有调用父类构造方法了吗?
public Member1(String name){
this.name=name;
}即使这个构造方法要调用父类的构造方法 ( public Fotballteam(){} ) 的话,那父类的构造方法也应该是有带参数的啊?
求解释。。
首先,heigth字母写错了
还有就是必须提供父类的无参数构造函数
{
int age,heigth,weight;
char sex;
public Footballteam(int age,char sex,int height,int weight){
this.age=age;
this.sex=sex;
this.heigth=heigth;
this.weight=weight;
}}class Member1 extends Footballteam
{
String name;
public Member1(){super(23,'M',173,140);this.name=name;};
}class Captain extends Member1
{
public Captain(){super();};}class B
{
public static void main(String[] args){
Member1 c1=new Member1();
System.out.println(c1.age);
}
}
输出23
Captain c2=new Captain();
System.out.println(c2.name);
输出为
23
null //你没有输入名字;对于上面几个问题:
父类既然有了带参数的构造方法,系统就不会给它默认构造方法, 子类必须继承父类的构造器也就是构造方法;并且参数类型一样;用super()方法必须注意看父类的情况添加参数
如果子类的构造方法中没有显示地调用基类构造方法,则系统默认调用基类无参的构造方法
如果子类的构造方法中既没有显式调用基类方法而基类又没有无参的构造方法,则编译出错楼主的失误应该就在这两句话里吧
public Footballteam() {}如果子类的构造方法中没有显示地调用基类构造方法,则系统默认调用基类无参的构造方法
如果子类的构造方法中既没有显式调用基类方法而基类又没有无参的构造方法,则编译出错