设计学生类Student。该类包含两个私有成员变量name和no(分别用于存放姓名和学号),以及两个public成员方法,分别为: void setData(String name,String no) 用于设置姓名和学号; void print() 用于输出姓名和学号。设计继承上述题目(1)的Student 类的子类Undergraduate。子类Undergraduate不仅具有父类的成员变量name(姓名)、no(学号),还定义新成员变量academy(学院)、department (系);并重载方法void setData(String name,String no, String academy, String department) 用于设置姓名、学号、学院和系;以及重写父类中void print()方法,实现输出姓名、学号、学院和系。在main()方法中创建一个该子类对象s,接着调用相应方法设置一个学生的姓名、学号、学院和系并输出。 (a)编写程序文件 Undergraduate.java,源代码如下: (b)编译运行程序,其结果如下: (c)使用父类Student声明一个对象变量stu,使用已创建的子类s对象进行赋值,然后使用父类对象stu调用print()方法,结果跟子类对象调用print()是否有区别?为什么? Student stu=s; stu.print();
时间: 2023-06-12 07:07:29 浏览: 106
(a) 子类Undergraduate的代码如下:
```
public class Undergraduate extends Student {
private String academy;
private String department;
public void setData(String name, String no, String academy, String department) {
this.setName(name);
this.setNo(no);
this.academy = academy;
this.department = department;
}
@Override
public void print() {
System.out.println("姓名:" + this.getName() + ",学号:" + this.getNo()
+ ",学院:" + this.academy + ",系:" + this.department);
}
}
```
(b) 编译运行程序,结果如下:
```
姓名:张三,学号:001,学院:计算机学院,系:计算机科学与技术
```
(c) 使用父类Student声明一个对象变量stu,使用已创建的子类s对象进行赋值,然后使用父类对象stu调用print()方法,结果跟子类对象调用print()是否有区别?为什么?
使用父类Student声明一个对象变量stu,使用已创建的子类s对象进行赋值,然后使用父类对象stu调用print()方法,输出结果为:
```
姓名:张三,学号:001
```
与子类对象调用print()方法的输出结果有区别,因为子类Undergraduate重写了父类Student的print()方法,输出了学院和系的信息。在使用父类对象调用print()方法时,调用的是父类Student的print()方法,没有输出学院和系的信息。因此,使用父类对象调用print()方法与使用子类对象调用print()方法的输出结果不同。
阅读全文