super(name, age);是干嘛用的
时间: 2024-04-27 11:21:07 浏览: 78
`super(name, age)` 是调用父类 `Animal` 的构造函数来初始化继承自父类的属性 `name` 和 `age`。使用 `super` 关键字可以调用父类的构造函数,以便在子类中初始化继承自父类的属性。
在 `Cat` 和 `Dog` 类的构造函数中,首先调用父类 `Animal` 的构造函数 `super(name, age)` 来初始化继承自父类的属性,然后再初始化子类自己的属性 `isIndoor` 和 `breed`。这样做是为了确保在创建 `Cat` 和 `Dog` 对象时,它们继承自父类的属性都被正确地初始化了。
需要注意的是,如果子类没有显式调用父类的构造函数,则编译器会自动调用父类的默认构造函数。但是,如果父类没有默认构造函数,则需要在子类的构造函数中显式地调用父类的构造函数。
相关问题
设有代码如下: 菜课 public class person{ String name; int age; public String introduce return('t am a person! class student extends person public student(String name,int age){ 金super.name=name; super.age=age; } @Override public String introduce)( return('I am a student!); class worker extends person( public worker(String name,int age){ 软件super.name=name;则试 super.age=age; @Override public String introduce return("I am a worker!");} 1.试分折以上代码体现了面向对象程序设计的何种特点, 这种特点对软件测试有何种影响。 2.试设计针对以上代码的测试脚本。
1. 以上代码体现了面向对象程序设计中的继承和多态特点。继承体现在class student和class worker都是继承自class person,而多态体现在class student和class worker都重写了父类person的introduce方法,实现了不同的行为。这种特点对软件测试的影响是,测试人员需要针对不同的子类进行测试,以保证程序的正确性。
2. 针对以上代码的测试脚本设计如下:
```
public class PersonTest {
@Test
public void testIntroduce() {
Person person = new Person();
assertEquals("I am a person!", person.introduce());
}
@Test
public void testStudentIntroduce() {
Student student = new Student("Tom", 18);
assertEquals("I am a student!", student.introduce());
}
@Test
public void testWorkerIntroduce() {
Worker worker = new Worker("Jerry", 25);
assertEquals("I am a worker!", worker.introduce());
}
}
```
该测试脚本分别对父类person和子类student、worker的introduce方法进行测试,以保证程序的正确性。
设有代码如下: public class person {String name; int age;public String introduce() {return ("I am a person!"); class student extends person { public student(String name,int age) {super.name=name; super.age=age; @Override public String introduce() { return ("I am a student!"); } } class worker extends person { public worker(String name,int age) {super.name=name;super.age=age; @Override public String introduce() { return("I am aworker!"); 1.试分析以上代码体现了面向对象程序设计的何种特点,这种特点对软件测试有何种影响。 2.试设计针对以上代码的测试脚本。
1. 以上代码体现了继承、多态和方法重写等面向对象程序设计的特点。子类继承了父类的属性和方法,并且可以对父类方法进行重写,达到多态的效果。这种特点对软件测试有着至关重要的影响,因为在测试过程中需要保证继承和重写的正确性,以及多态的正确运行。
2. 针对以上代码的测试脚本可以包括以下几个方面:
- 对于person类,测试属性的初始化是否正确;
- 对于student类和worker类,测试构造函数的参数传递是否正确;
- 对于person类、student类和worker类,测试introduce方法的返回值是否正确;
- 对于student类和worker类,测试是否成功重写了introduce方法;
- 测试多态的正确性,即将student对象和worker对象分别赋值给person类型的变量,并测试调用introduce方法的结果是否符合预期。
具体的测试用例可以根据具体需求进行设计,例如:
- 对于person类,测试属性的初始化是否正确:
```
person p = new person();
assert(p.name == null);
assert(p.age == 0);
```
- 对于student类和worker类,测试构造函数的参数传递是否正确:
```
student s = new student("Tom", 18);
assert(s.name.equals("Tom"));
assert(s.age == 18);
worker w = new worker("Jerry", 25);
assert(w.name.equals("Jerry"));
assert(w.age == 25);
```
- 对于person类、student类和worker类,测试introduce方法的返回值是否正确:
```
person p = new person();
assert(p.introduce().equals("I am a person!"));
student s = new student("Tom", 18);
assert(s.introduce().equals("I am a student!"));
worker w = new worker("Jerry", 25);
assert(w.introduce().equals("I am a worker!"));
```
- 对于student类和worker类,测试是否成功重写了introduce方法:
```
person p1 = new student("Tom", 18);
assert(p1.introduce().equals("I am a student!"));
person p2 = new worker("Jerry", 25);
assert(p2.introduce().equals("I am a worker!"));
```
- 测试多态的正确性,即将student对象和worker对象分别赋值给person类型的变量,并测试调用introduce方法的结果是否符合预期:
```
person p1 = new student("Tom", 18);
assert(p1.introduce().equals("I am a student!"));
person p2 = new worker("Jerry", 25);
assert(p2.introduce().equals("I am a worker!"));
```
阅读全文