原来上课老师布置过的作业 很早了 程序有一个父类 两个子类 你仔细看看吧 应该可以明白 class Card { private int number;//编号 private String name;//姓名 private String sex;//性别 private int dateOfBirth;//出生年月 public Card()//这就是无参数的构造方法 { number = 0; name = "Not name yet"; sex = "No message"; dateOfBirth = 0; } public Card(int newNumber,String newName,String newSex,int newDateOfBirth) { number = newNumber; name = newName; sex = newSex; dateOfBirth = newDateOfBirth; } public void setNumber(int newNumber) { number = newNumber; } public void setName(String newName) { name = newName; } public void setSex(String newSex) { sex = newSex; } public void setBirth(String newDateOfBirth) { dateOfBirth = newDateOfBirth; } public }class StudentCard extends Card { private String department;//系别 private int dateIntoSchool;//入校日期 private String registerMessage;//注册信息 public StudentCard() { super();//调用父类中无参的构造方法 department = "Not Department Yet"; dateIntoSchool = 0; registerMessage = "Not Message Yet"; } public StudentCard(String department,int dateIntoSchool,String registerMessage,int newNumber,String newName,String newSex,int newDateOfBirth) { super(int newNumber,String newName,String newSex,int newDateOfBirth);//调用父类中被重载的构造方法 this.department = department;//this关键字表示指示当前的数据对象 this.dateIntoSchool = dateIntoSchool; this.registerMessage = registerMessage; } public void setDepart(String department) { this.department = department; } public void setDateIntoSchool(int dateIntoSchool) { this.dateIntoSchool = dateIntoSchool; } public void setRegisterMessage(String registerMessage) { this.registerMessage = registerMessage; } public String getDepart() { return department; } public int getDate() { return dateIntoSchool; } public String getRegisterMessage() { return registerMessage; } }class TeacherCard extends Card { private String position;//职务 private int dateOfCard;//工作证签发日期 }
还有上面这个程序为什么他调用的父类的方法?这个调用的是子类的方法。 public class Test{ public static void main(String[] args) throws Exception{ B b = new B(); } }class A{ public A(){ System.out.println("父类构造方法被调用"); } public A(int i){ System.out.println("父类带参数的构造方法被调用"); } } class B extends A{ public B(){ //super(1); //super();//子类默认调用父类无惨构造函数,写不写都一样 System.out.println("子类构造方法被调用"); } }
public class Test{ public static void main(String[] args) throws Exception{ B b = new B(); } }class A{ public A(){ System.out.println("父类构造方法被调用"); } public A(int i){ System.out.println("父类带参数的构造方法被调用"); } } class B extends A{ public B(){ //super(1); //super();//子类默认调用父类无惨构造函数,写不写都一样 System.out.println("子类构造方法被调用"); } }
class Temp{ public static void main(String args[]){ Student s1 = new Student();
} } class Person{ String name; int age; public Person(){ System.out.println("无参构造方法"); }
public void Person(String name,int age){ this.name = name; this.age = age; } void Info(){ System.out.println("姓名:" + name + "年龄:" + age); } } class Student extends Person{ String school = "学校"; public Student(){ super();//调用父类无参构造方法 } } public Student(String name,int age){ this.name = name; this.age = age; } public Student(String name,int age,String school){ super(name,age); this.school = school; }那我这样写为什么是错的? Temp.java:158: 需要 "class" 或 "interface" public Student(String name,int age){
public Student(){ super();//调用父类无参构造方法 } }//这个大括号放错地方了
后面的方法定义到Student外面了,就不是构造方法了,所以他提示你需要类或者接口。
public A() public void A() 是重写么?
class Student extends Person{ String school = "学校"; public Student(){ super();//调用父类无参构造方法 }
public void Student(String name,int age){ this.name = name; this.age = age; } public void Student(String name,int age,String school){ super(name,age); this.school = school; } } 怎么他还提示:对 super 的调用必须是构造函数中的第一个语句 super(name,age);
程序有一个父类 两个子类 你仔细看看吧 应该可以明白
class Card
{
private int number;//编号
private String name;//姓名
private String sex;//性别
private int dateOfBirth;//出生年月 public Card()//这就是无参数的构造方法
{
number = 0;
name = "Not name yet";
sex = "No message";
dateOfBirth = 0;
} public Card(int newNumber,String newName,String newSex,int newDateOfBirth)
{
number = newNumber;
name = newName;
sex = newSex;
dateOfBirth = newDateOfBirth;
} public void setNumber(int newNumber)
{
number = newNumber;
} public void setName(String newName)
{
name = newName;
} public void setSex(String newSex)
{
sex = newSex;
} public void setBirth(String newDateOfBirth)
{
dateOfBirth = newDateOfBirth;
} public
}class StudentCard extends Card
{
private String department;//系别
private int dateIntoSchool;//入校日期
private String registerMessage;//注册信息 public StudentCard()
{
super();//调用父类中无参的构造方法
department = "Not Department Yet";
dateIntoSchool = 0;
registerMessage = "Not Message Yet";
} public StudentCard(String department,int dateIntoSchool,String registerMessage,int newNumber,String newName,String newSex,int newDateOfBirth)
{
super(int newNumber,String newName,String newSex,int newDateOfBirth);//调用父类中被重载的构造方法
this.department = department;//this关键字表示指示当前的数据对象
this.dateIntoSchool = dateIntoSchool;
this.registerMessage = registerMessage;
} public void setDepart(String department)
{
this.department = department;
} public void setDateIntoSchool(int dateIntoSchool)
{
this.dateIntoSchool = dateIntoSchool;
} public void setRegisterMessage(String registerMessage)
{
this.registerMessage = registerMessage;
} public String getDepart()
{
return department;
} public int getDate()
{
return dateIntoSchool;
} public String getRegisterMessage()
{
return registerMessage;
}
}class TeacherCard extends Card
{
private String position;//职务
private int dateOfCard;//工作证签发日期
}
public class Test{
public static void main(String[] args) throws Exception{
B b = new B();
}
}class A{
public A(){
System.out.println("父类构造方法被调用");
}
public A(int i){
System.out.println("父类带参数的构造方法被调用");
}
}
class B extends A{
public B(){
//super(1);
//super();//子类默认调用父类无惨构造函数,写不写都一样
System.out.println("子类构造方法被调用");
}
}
public static void main(String[] args) throws Exception{
B b = new B();
}
}class A{
public A(){
System.out.println("父类构造方法被调用");
}
public A(int i){
System.out.println("父类带参数的构造方法被调用");
}
}
class B extends A{
public B(){
//super(1);
//super();//子类默认调用父类无惨构造函数,写不写都一样
System.out.println("子类构造方法被调用");
}
}
public static void main(String args[]){
Student s1 = new Student();
}
}
class Person{
String name;
int age;
public Person(){
System.out.println("无参构造方法");
}
public void Person(String name,int age){
this.name = name;
this.age = age;
}
void Info(){
System.out.println("姓名:" + name + "年龄:" + age);
}
}
class Student extends Person{
String school = "学校";
public Student(){
super();//调用父类无参构造方法
}
} public Student(String name,int age){
this.name = name;
this.age = age;
}
public Student(String name,int age,String school){
super(name,age);
this.school = school;
}那我这样写为什么是错的?
Temp.java:158: 需要 "class" 或 "interface"
public Student(String name,int age){
super();//调用父类无参构造方法
}
}//这个大括号放错地方了
public void A()
是重写么?
String school = "学校";
public Student(){
super();//调用父类无参构造方法
}
public void Student(String name,int age){
this.name = name;
this.age = age;
}
public void Student(String name,int age,String school){
super(name,age);
this.school = school;
}
}
怎么他还提示:对 super 的调用必须是构造函数中的第一个语句
super(name,age);
构造方法并非类的成员,所以没有继承之说。
1.如果需要显式的调用父类的构造器,则必须是第一个语句
2.如果没有显式的调用父类的构造器,则编译器会自动添加一个隐式的父类无参数构造器super()
这个是Java的规定