欢迎来到CloudService文涵的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

Java实验三:类的继承与派生(头歌)

第1关:什么是封装,如何使用封装

编程要求
根据提示,在右侧编辑器补充代码。

定义一个Person类,包含姓名(name)、性别(sex)、年龄(age)等字段; 定义一个Teacher类继承Person类,增加职称(pro)、部门(department)等字段; 定义一个Student类继承Person类,增加学号(no)、入学时间(enter)、专业(major)等字段; 定义各类的构造方法和toString()方法,并分别创建对象进行测试。

输出样例结果如下:

image

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对象一年需要支付的薪水总额。

image

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() 方法。

image

// 自行设计接口和实现类
/********** 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 定义接口
image

	/********** 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
image

/********** 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
image

 /********** 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
image

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();
        }
}
posted on 2024-03-29 13:12  Cloudservice  阅读(720)  评论(0编辑  收藏  举报