Java实验三 Java类的继承与派生

本文详细介绍了Java中的类继承、上转型对象的使用、多态特性的体现,以及接口和抽象类的运用,通过示例展示了如何在实际编程中创建和操作这些概念。
摘要由CSDN通过智能技术生成

1.类的继承

代码如下:
package step1;

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 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;
	}
	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;
	}
	@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 pro;
	private String department;
	public Teacher(String name, String sex, int age, String pro, String department) {
		super(name, sex, age);
		this.pro = pro;
		this.department = department;
	}
	public String getPro() {
		return pro;
	}
	public void setPro(String pro) {
		this.pro = pro;
	}
	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.pro+","+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.上转型对象的使用,多态的特性

代码如下:
package step2;

abstract class Employee {
	public abstract double earnings();
}
class YearWorker extends Employee {
	//重写earnings()方法
    /********** Begin **********/
	@Override
	public double earnings() {
		return 100000.0;
	}

	/********** End **********/	                                               		
}
class MonthWorker extends Employee {
	//重写earnings()方法
    /********** Begin **********/
	@Override
	public double earnings() {
		return 120000.0;
	}

	/********** End **********/	                                               		
}
class WeekWorker extends Employee {
	//重写earnings()方法
    /********** Begin **********/
	@Override
	public double earnings() {
		return 5000.0*4*12;
	}

	/********** End **********/	                                                		
}
class Company {
	Employee[] employees;
	double salaries = 0;
	Company(Employee[] employees) {
		this.employees = employees;
	}
	public double salariesPay() {
		salaries = 0;
		//计算salaries
		/********** Begin **********/
		for(Employee employee:employees) {
			salaries+=employee.earnings();
		}

	    /********** End **********/	                             		
		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.接口的使用

代码如下:
package step3;

// 自行设计接口和实现类
/********** 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.综合应用

代码如下:
1:学生类Student.java
package step4;

public class Student {
    /********** 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) {
		this.sdept = sdept;
	}


	@Override
	public String toString() {
		return "学号: "+sno+"	姓名: "+sname+"	系部: "+sdept;
	}
	
	
	
	

    /********** End **********/
}
2:接口IStudentDAO
package step4;
 
 public interface IStudentDAO {
	/********** 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 **********/

}
3:接口IStudentDAO的实现类StudentDAOImpl
package step4;

import java.util.ArrayList;
import java.util.List;

public class StudentDAOImpl implements IStudentDAO {

	static List<Student> students = new ArrayList<Student>();
	
	/********** Begin **********/
    //自行实现所有其它方法
    @Override
    public void insertStudent(Student stu) {
    	// TODO Auto-generated method stub
    	students.add(stu);
    }

    @Override
    public void deleteStudent(String sno) {
    	// TODO Auto-generated method stub
    	for(Student s:students) {
    		if(s.getSno()==sno) {
    			students.remove(s);
    			break;
    		}
    	}
    }
    
    @Override
    public void updateStudent(Student stu) {
    	// TODO Auto-generated method stub
    	for(Student s:students) {
    		if(s.getSno()==stu.getSno()) {
    			s.setSname(stu.getSname());
    			s.setSdept(stu.getSdept());
    		}
    	}
    }
    
    @Override
    public Student findStudentBySno(String sno) {
    	// TODO Auto-generated method stub
    	for(Student s:students) {
    		if(s.getSno()==sno) {
    			return s;
    		}
    	}
    	return null;
    }
    
    @Override
    public void displayStudentBySno(String sno) {
    	// TODO Auto-generated method stub
    	
    }
    /********** End **********/

    /**
    * 显示所有学生信息记录参考代码
    */
    @Override
    public void displayAllStudent() {
        if (students.size() > 0) {
            for (Student stu : students) {
                System.out.println(stu);
            }
        }else {
            System.out.println("数据库中无学生记录!");
        }
    }

} 
4:主类MainClass
package step4;

import java.util.Scanner;

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();
	}
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值