设有代码如下: 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.试设计针对以上代码的测试脚本。
时间: 2024-01-05 09:03:19 浏览: 115
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!"));
```
阅读全文