package case3; public class superTest { public static void main(String[] args) { // 实例化一个Student类的对象s,为Student对象s中的school赋值,打印输出信息 /********* begin *********/ Student s = new Student("张三",18,"哈佛大学"); s.print(); /********* end *********/ } } class Person { /********* begin *********/ String name; int age; public void Person(String name,int age){ this.name=name; this.age=age; } /********* end *********/ } class Student extends Person { /********* begin *********/ String school; public void Student(String name,int age,String school){ super.Person(name,age); this.school=school; } void print(){ System.out.println("姓名:"+name+"年龄:"+age+"学校:"+school); } /********* end *********/ }src/case3/superTest.java:7: error: constructor Student in class Student cannot be applied to given types; Student s = new Student("张三",18,"哈佛大学"); ^ required: no arguments found: String,int,String reason: actual and formal argument lists differ in length报错这个,请在不要改变我原有程序架构的条件下修改我的程序
时间: 2023-07-18 12:45:27 浏览: 57
请修改以下代码:
```
public void Person(String name,int age){
this.name=name;
this.age=age;
}
```
修改为:
```
public Person(String name,int age){
this.name=name;
this.age=age;
}
```
```
public void Student(String name,int age,String school){
super.Person(name,age);
this.school=school;
}
```
修改为:
```
public Student(String name,int age,String school){
super(name,age);
this.school=school;
}
```
在Java中,构造函数没有返回值类型,因此在定义构造函数时不需要声明void。在调用超类的构造函数时,应使用super关键字,并传递相应的参数。
相关问题
package case3; public class superTest { public static void main(String[] args) { // 实例化一个Student类的对象s,为Student对象s中的school赋值,打印输出信息 /********* begin *********/ /********* end *********/ } } class Person { /********* begin *********/ /********* end *********/ } class Student extends Person { /********* begin *********/ /********* end *********/ }
可以在Person类中定义一个String类型的变量school,表示学校名称,并提供一个带参构造方法和一个getter方法。
在Student类中重写父类的带参构造方法,调用父类的构造方法,并为学校名称赋值。同时,也可以在Student类中提供一个getter方法获取学校名称。
代码如下:
```
package case3;
public class superTest {
public static void main(String[] args) {
// 实例化一个Student类的对象s,为Student对象s中的school赋值,打印输出信息
Student s = new Student("Tom", 18, "ABC School");
System.out.println(s.getName() + ",年龄:" + s.getAge() + ",学校:" + s.getSchool());
}
}
class Person {
private String school;
public Person() {}
public Person(String school) {
this.school = school;
}
public String getSchool() {
return school;
}
}
class Student extends Person {
private String name;
private int age;
public Student(String name, int age, String school) {
super(school);
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
package com.nwpu.test.TSTest; public class SuperTest05 { public static void main(String[] args) { Vip v = new Vip("张三"); v.doSome(); } } class Customer{ String name; public Customer() { } public Customer(String name) { this.name = name; } public void doSome(){ System.out.println(this.name + "doSome!!!"); System.out.println(name + "doSome!!!"); } } class Vip extends Customer { //假设子类也有一个同名属性 String name; //实例变量 public Vip() { } public Vip(String name) { super(name); } } 解释一下为什么v.doSome会输出“张三doSome!!!”
在这段代码中,首先创建了一个`Vip`类的实例对象`v`,并传入了一个名为“张三”的参数,在`Vip`类的构造方法中通过`super(name)`将该参数传递给父类`Customer`的构造方法,从而完成了父类实例变量`name`的初始化。
在`Vip`类中定义了一个同名实例变量`name`,但是在`Vip`类的构造方法中没有对其进行初始化操作,因此,子类实例变量`name`的值为默认值`null`。
在`Customer`类中,定义了一个`doSome()`方法,其中调用了`this.name`和`name`,分别输出了实例变量`name`的值。由于`Vip`类中没有覆盖`doSome()`方法,因此调用的是`Customer`类中的`doSome()`方法。由于`Vip`类中的同名实例变量`name`没有被初始化,因此在调用`doSome()`方法时输出的实例变量`name`的值为`null`。
综上所述,调用`v.doSome()`方法时,会输出“张三doSome!!!”,其中“张三”来自`Vip`类实例对象的初始化参数,而“doSome!!!”来自`Customer`类中的`doSome()`方法的输出语句。