设计继承上述题目(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-13 18:04:10 浏览: 173
(a) Undergraduate.java文件代码如下:
```java
public class Undergraduate extends Student {
private String academy;
private String department;
public void setData(String name,String no, String academy, String department) {
this.name = name;
this.no = no;
this.academy = academy;
this.department = department;
}
@Override
public void print() {
System.out.println("姓名:" + name);
System.out.println("学号:" + no);
System.out.println("学院:" + academy);
System.out.println("系:" + department);
}
}
```
(b) 编译运行程序,结果如下:
```
姓名:张三
学号:20190001
学院:计算机科学与技术学院
系:软件工程系
```
(c) 使用父类Student声明一个对象变量stu,使用已创建的子类s对象进行赋值,然后使用父类对象stu调用print()方法,结果跟子类对象调用print()是否有区别?为什么?
使用父类Student声明一个对象变量stu,使用已创建的子类s对象进行赋值,可以编译通过。但是在调用print()方法时,由于父类中的print()方法没有被子类重写,所以会调用父类中的print()方法,输出的结果只有姓名和学号,没有学院和系的信息。
因此,使用父类对象stu调用print()方法和使用子类对象调用print()方法是有区别的,因为子类重写了print()方法,所以输出的信息更完整。
阅读全文