Java实验三:类的继承与派生(头歌)
第1关:什么是封装,如何使用封装
编程要求
根据提示,在右侧编辑器补充代码。
定义一个Person类,包含姓名(name)、性别(sex)、年龄(age)等字段; 定义一个Teacher类继承Person类,增加职称(pro)、部门(department)等字段; 定义一个Student类继承Person类,增加学号(no)、入学时间(enter)、专业(major)等字段; 定义各类的构造方法和toString()方法,并分别创建对象进行测试。
输出样例结果如下:
import java.util.Scanner;
class Person {
/********** Begin **********/
// 自行设计类的实现
protected String name;
protected String sex;
protected int age;
public Person(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
/********** End **********/
}
class Student extends Person {
/********** Begin **********/
// 自行设计类的实现
private String no;
private String enter;
private String major;
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getEnter() {
return enter;
}
public void setEnter(String enter) {
this.enter = enter;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public Student(String name, String sex, int age, String no, String enter, String major) {
super(name,sex,age);
this.no = no;
this.enter = enter;
this.major = major;
}
@Override
public String toString() {
return super.name+","+super.sex+","+this.age+","+this.no+","+this.enter+","+this.major;
}
/********** End **********/
}
class Teacher extends Person {
/********** Begin **********/
// 自行设计类的实现
private String por;
private String department;
public Teacher(String name, String sex, int age, String por, String department) {
super(name, sex, age);
this.por=por;
this.department=department;
}
public String getPor() {
return por;
}
public void setPor(String por) {
this.por = por;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
@Override
public String toString() {
return super.name+","+super.sex+","+this.age+","+this.por+","+this.department;
}
/********** End **********/
}
public class Lab3_1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Student student = new Student(sc.next(), sc.next(), sc.nextInt(), sc.next(), sc.next(), sc.next());
Teacher teacher = new Teacher(sc.next(), sc.next(), sc.nextInt(), sc.next(), sc.next());
System.out.println("学生基本信息为:" + student);
// System.out.println("教师的信息为:" + teacher);
sc.close();
}
}
第2关:上转型对象的使用,多态的特性
编程要求
根据提示,在右侧编辑器补充代码。
定义一个抽象(abstract)类,类名为Employee。Employee类有一个抽象(abstract)方法:public abstract double earnings();
定义Employee的子类:YearWorker、MonthWorker和WeekWorker。
- YearWorker对象按年领取薪水(每年10万);
- MonthWorker对象按月领取薪水(每月1万);
- WeekWorker对象按周领取薪水(每周0.5万,设定一个月4周)。
子类需要重写父类的earnings()方法,给出各自领取每年报酬的具体方式。 定义一个Company类,该类用Employee数组作为成员,Employee数组的单元可以是YearWorker对象、MonthWorker对象、WeekWorker对象的上转型对象。 要求程序能输出Company对象一年需要支付的薪水总额。
package step2;
abstract class Employee {
public abstract double earnings();
}
class YearWorker extends Employee {
@Override
public double earnings() {
return 100000;
}
}
class MonthWorker extends Employee {
@Override
public double earnings() {
return 10000*12;
}
}
class WeekWorker extends Employee {
@Override
public double earnings() {
return 5000*4*12;
}
}
class Company {
Employee[] employees;
double salaries = 0;
Company(Employee[] employees) {
this.employees = employees;
}
public double salariesPay() {
salaries = 0;
for (Employee employee : employees) {
salaries += employee.earnings();
}
return salaries;
}
}
public class HardWork {
public static void main(String[] args) {
Employee[] employees = new Employee[20];
for (int i = 0; i < employees.length; i++) {
if (i % 3 == 0)
employees[i] = new WeekWorker();
else if (i % 3 == 1)
employees[i] = new MonthWorker();
else if (i % 3 == 2)
employees[i] = new YearWorker();
}
Company company = new Company(employees);
System.out.println("公司年工资总额:" + company.salariesPay());
}
}
第3关:接口的使用
编程要求
根据提示,在右侧编辑器补充代码。
定义一个接口(Display.java),其屮包含一个 display() 方法用于显示信息; 定义通知类(Inform)、汽车类(Car)、广告类(Adervise)均要实现该接口,以显示“通知内容”、“汽车油量”、“广告消息”。 试编程实现并测试类的设计,创建的对象用接口引用,并通过接口引用变量执行 display() 方法。
// 自行设计接口和实现类
/********** Begin **********/
//定义接口
interface Display {
void display();
}
//下面是实现类
class Adervise implements Display{
@Override
public void display() {
System.out.println("广告消息");
}
}
class Car implements Display{
@Override
public void display() {
System.out.println("汽车油量");
}
}
class Inform implements Display {
@Override
public void display() {
System.out.println("通知内容");
}
}
/********** End **********/
public class Lab3_3 {
public static void main(String[] args) {
Display[] arr = { new Inform(), new Car(), new Adervise() };
for (Display d : arr) {
d.display();
}
}
}
第4关:综合应用
第一步切换IStudentDAO.java 定义接口
/********** Begin **********/
// 插入学生信息记录
public void insertStudent(Student stu);
// 删除指定学号学生信息记录
public void deleteStudent(String sno);
// 更新指定学生信息记录
public void updateStudent(Student stu);
// 按学号查询指定学生信息记录
public Student findStudentBySno(String sno);
// 显示指定学号学生信息记录
public void displayStudentBySno(String sno);
// 显示所有学生信息记录
public void displayAllStudent();
/********** End **********/
第二步 实现接口切换到 StudentDAOImpl.java
/********** Begin **********/
//自行实现所有其它方法
public void insertStudent(Student stu) {
students.add(stu);
}
public void deleteStudent(String sno) {
for (Student s:students
) {
if (s.getSno()==sno){
students.remove(s);
break;
}
}
}
public void updateStudent(Student stu) {
for (Student s:students
) {
if (s.getSno()==stu.getSno()){
s.setSname(stu.getSname());
s.setSdept(stu.getSdept());
}
}
}
public Student findStudentBySno(String sno) {
for (Student s:students
) {
if (s.getSno()==sno){
return s;
}
}
return null;
}
public void displayStudentBySno(String sno) {
}
/********** End **********/
第三步 编写实体层 打开代码文件Student.java
/********** Begin **********/
private String sno;
private String sname;
private String Sdept;
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSdept() {
return Sdept;
}
public void setSdept(String sdept) {
Sdept = sdept;
}
@Override
public String toString() {
return "学号: "+sno+" 姓名: "+sname+" 系部: "+Sdept;
}
/********** End **********/
第四步 选中MainClass.java
public class MainClass {
//要定义的接口
int menu_select(Scanner scanner){
return 0;
}
void inputStudent(Student stu,Scanner scanner){
}
void updateStudent(Student stu,Scanner scanner){
};
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
StudentDAOImpl studentDAOImpl = new StudentDAOImpl();
//1. 插入学生信息
Student stu = new Student();
stu.setSno(scanner.next());
stu.setSname(scanner.next());
stu.setSdept(scanner.next());
studentDAOImpl.insertStudent(stu);
//2. 显示插入学生信息
System.out.println("1. 插入学生信息如下:");
studentDAOImpl.displayAllStudent();
//3. 更新学生信息
stu.setSname("李四");
stu.setSdept("计算机系");
//
studentDAOImpl.updateStudent(stu);
System.out.println("2. 更新后学生信息如下:");
System.out.println(studentDAOImpl.findStudentBySno(stu.getSno()));
//4. 删除指定学生信息
System.out.println("3. 删除当前学号学生信息:" + stu.getSno());
studentDAOImpl.deleteStudent(stu.getSno());
System.out.println("学生信息已删除!");
//2. 显示插入学生信息
System.out.println("5. 显示所有学生信息:");
studentDAOImpl.displayAllStudent();
scanner.close();
}
}
本文来自博客园,作者:Cloudservice,转载请注明原文链接:https://www.cnblogs.com/whwh/p/18103616,只要学不死,就往死里学!