Java面向对象_3.Java封装综合案例

Java面向对象_3.Java封装综合案例

编写程序

package com.hello.model;

/**
 * 专业类
 * 
 * @author leiyu
 *
 */
public class Subject {
	// 成员属性:专业名称、编号、学制年限、报名选修的学生信息、报名选修的成员个数
	private String subjectName;
	private String subjectNo;
	private int subjectLife;
	private Student[] myStudents;
	private int studentNum;

	// 无参构造方法
	public Subject() {

	}

	// 带参构造,实现对学科名称、专业编号、学制年限赋值
	public Subject(String subjectName, String subjectNo, int subjectLift) {
		this.setSubjectName(subjectName);
		this.setSubjectNo(subjectNo);
		this.setSubjectLife(subjectLift);
	}

	// 带参构造,实现全部属性的赋值
	public Subject(String subjectName, String subjectNo, int subjectLift, Student[] myStudents) {
		this.setSubjectName(subjectName);
		this.setSubjectNo(subjectNo);
		this.setSubjectLife(subjectLift);
		this.setMyStudents(myStudents);
	}

	public String getSubjectName() {
		return subjectName;
	}

	public void setSubjectName(String subjectName) {
		this.subjectName = subjectName;
	}

	public String getSubjectNo() {
		return subjectNo;
	}

	public void setSubjectNo(String subjectNo) {
		this.subjectNo = subjectNo;
	}

	public int getSubjectLife() {
		return subjectLife;
	}

	// 设置学制年限,限制必须>0
	public void setSubjectLife(int subjectLife) {
		if (subjectLife <= 0)
			return;
		this.subjectLife = subjectLife;
	}

	/**
	 * 获取选修专业的学生信息,如果保存学生信息的数组未被初始化,则先初始化长度200
	 * 
	 * @return 保存学生信息的数组
	 */
	public Student[] getMyStudents() {
		if (this.myStudents == null)
			this.myStudents = new Student[200];
		return myStudents;

	}

	public void setMyStudents(Student[] myStudents) {
		this.myStudents = myStudents;
	}

	public int getStudentNum() {
		return studentNum;
	}

	public void setStudentNum(int studentNum) {
		this.studentNum = studentNum;
	}

	/**
	 * 专业介绍的方法
	 * 
	 * @return 专业介绍的相关信息,包括名称、编号、年限
	 */
	public String info() {
		String str = "专业信息如下:\n专业名称:" + this.getSubjectName() + "\n专业编号:" + this.getSubjectNo() + "\n学制年限:"
				+ this.getSubjectLife() + "年";
		return str;
	}

	public void addStudent(Student stu) {
		/*
		 * 1、将学生保存到数组中 2、将学生个数保存到studentNum中
		 */
		for (int i = 0; i < this.getMyStudents().length; i++) {
			if (this.getMyStudents()[i] == null) {
				this.getMyStudents()[i] = stu;
				// 2、将学生个数保存到studentNum中
				this.studentNum = i + 1;
				return;
			}
		}
	}
}

package com.hello.model;

public class Student {
	// 成员属性:姓名、学号、性别、年龄
	private String studentNo;
	private String studentName;
	private String studentSex;
	private int studentAge;
	private Subject studentSubject;

	// 无参构造方法
	public Student() {

	}

	// 多参构造方法,实现对学号、姓名、性别、年龄属性的赋值
	public Student(String studentNo, String studentName, String studentSex, int studentAge) {
		this.setStudentNo(studentNo);
		this.setStudentName(studentName);
		this.setStudentSex(studentSex);
		this.setStudentAge(studentAge);
		this.setStudentSubject(studentSubject);
	}

	// 多参构造方法,实现对全部属性的赋值
	public Student(String studentNo, String studentName, String studentSex, int studentAge, Subject studentSubject) {
		this.setStudentNo(studentNo);
		this.setStudentName(studentName);
		this.setStudentSex(studentSex);
		this.setStudentAge(studentAge);
		this.setStudentSubject(studentSubject);
	}

	public String getStudentNo() {
		return studentNo;
	}

	public void setStudentNo(String studentNo) {
		this.studentNo = studentNo;
	}

	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}

	public String getStudentSex() {
		return studentSex;
	}

	public void setStudentSex(String studentSex) {
		// 限制性别只能是"男"或者"女",繁殖强制赋值为"男"
		if (studentSex != "男" && studentSex != "女")
			this.studentSex = "男";
		else
			this.studentSex = studentSex;
	}

	public int getStudentAge() {
		return studentAge;
	}

	/**
	 * 给年龄赋值,限定必须在10--100之间,反之赋值18
	 * 
	 * @return studentAge 传入的年龄
	 */
	public void setStudentAge(int studentAge) {
		if (studentAge < 10 || studentAge > 100)
			this.studentAge = 18;
		else
			this.studentAge = studentAge;
	}

	/**
	 * 获取专业对象,如果对象没有实例化,先实例化后再返回
	 * 
	 * @return 专业对象信息
	 */
	public Subject getStudentSubject() {
		if (this.studentSubject == null)
			this.studentSubject = new Subject();
		return studentSubject;
	}

	public void setStudentSubject(Subject studentSubject) {
		this.studentSubject = studentSubject;
	}

	/**
	 * 学生自我介绍的方法
	 * 
	 * @return 自我介绍的信息,包括姓名、学号、性别、年龄
	 */
	public String introduction() {
		String str = "学生信息如下:\n姓名:" + this.getStudentName() + "\n学号:" + this.getStudentNo() + "\n性别:"
				+ this.getStudentSex() + "\n年龄:" + this.getStudentAge() + "\n所报专业名称:"
				+ this.getStudentSubject().getSubjectName() + "\n学制年限" + this.getStudentSubject().getSubjectLife();
		;
		return str;
	}

	/**
	 * 学生自我介绍的方法
	 * 
	 * @param subjectName 所学专业名称
	 * @param subjectLife 学制年限
	 * @return 自我介绍的信息,包括姓名、学号、性别、年龄、所学专业名称、学制年限
	 */
	public String introduction(String subjectName, int subjectLife) {
		String str = "学生信息如下:\n姓名:" + this.getStudentName() + "\n学号:" + this.getStudentNo() + "\n性别:"
				+ this.getStudentSex() + "\n年龄:" + this.getStudentAge() + "\n所报专业名称:" + subjectName + "\n学制年限"
				+ subjectLife;
		return str;
	}

	/**
	 * 学生自我介绍的方法
	 * 
	 * @param mySubject 所选专业的对象
	 * @return 自我介绍的信息,包括姓名、学号、性别、年龄、所学专业名称、学制年限、专业编号
	 */
	public String introduction(Subject mySubject) {
		String str = "学生信息如下:\n姓名:" + this.getStudentName() + "\n学号:" + this.getStudentNo() + "\n性别:"
				+ this.getStudentSex() + "\n年龄:" + this.getStudentAge() + "\n所报专业名称:" + mySubject.getSubjectName()
				+ "\n学制年限:" + mySubject.getSubjectLife() + "\n专业编号:" + mySubject.getSubjectNo();
		return str;
	}

}

package com.hello.test;

import com.hello.model.Student;
import com.hello.model.Subject;

public class SchoolTest {

	public static void main(String[] args) {
		// 测试Subject
		Subject sub1 = new Subject("计算机科学与技术", "J0001", 4);
		System.out.println(sub1.info());
		System.out.println("=====================================");
		// 测试Student
		Student stu1 = new Student("S01", "张三", "男", 18, sub1);
		System.out.println(stu1.introduction());
		System.out.println("=====================================");
		Student stu2 = new Student("S02", "李四", "女", 17);
		System.out.println(stu2.introduction("计算机科学与技术", 4));
		System.out.println("=====================================");
		Student stu3 = new Student("S03", "王五", "男", 18);
		System.out.println(stu3.introduction(sub1));
		System.out.println("=====================================");
		// 测试指定专业中到底有多少学生报名
		sub1.addStudent(stu1);
		sub1.addStudent(stu2);
		sub1.addStudent(stu3);
		System.out.println(sub1.getSubjectName() + "的专业中有" + sub1.getStudentNum() + "学生进行了报名");
	}

}

在这里插入图片描述
在方法中通过对象作为参数,传递的是它的引用,可以通过引用获取该对象的所有信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值