日期:2014-05-20  浏览次数:20779 次

java继承中的构造方法的问题
代码如下:


class Person
{
 public String name;
 public int age;

 //  Person() {}

    Person(String name,int age) {
      setPerson(name,age);
}

public void setPerson(String name,int age) {
      this.name = name;
  this.age = age;
}

String getname() {
     return name;
}

int getage() {
     return age;
}
}

class Student extends Person {
  String   name;
  int       age;
      String   school;
      int      QQ;

 Student (String name, int age, String school,  int QQ) {
// super(name,age);
      setStudent12(name,age,school, QQ);
 }

   void setStudent12(String name, int age, String school,  int QQ) {
  this.name = name;
  this.age = age;
  this.school = school;
  this.QQ = QQ;
   }
     
  String getschool() {
       return school;
  }

  int getQQ() {
       return QQ;
  }
}

public class STUdent
{
public static void main(String[] args) 
{
        Student  S = new Student("李华",23,"hbmy",20);
System.out.println(S.getname()+S.getage()+S.getschool()+S.getQQ());
}
}



---------- 编译 ----------
STUdent.java:32: 错误: 无法将类 Person中的构造器 Person应用到给定类型;
 Student (String name, int age, String school,  int QQ) {
                                                        ^
  需要: String,int
  找到: 没有参数
  原因: 实际参数列表和形式参数列表长度不同
1 个错误

Output completed (0 sec consumed) - Normal Termination

------解决方案--------------------
Student构造时一定要要执行父类的构造函数,若没有指定就默认无参构造函数,你没有写无参的构造函数,所以编译会报错。或者在Student的构造函数调用父类有参的构造函数。
------解决方案--------------------
引用:
成员变量不是还可以  隐藏   的吗,如果父类的成员变量在子类中完全被隐藏,这还需要用父类的构造方法么?
我这书上它没写啊!!!



只要有继承,就必须用一次父类的构造方法。就算父类成员变量在子类中完全被隐藏,默认还是会调用一次无参的构造。。。上面两个注释的地方启用一个就行~
我一直是这么理解的,不知道其他人怎么看
------解决方案--------------------
子类构造的时候先调用父类构造函数,没显示调用就是调用的父类无餐那个 你这两个//  自己研究下