Java:封装案例(续)
来源:互联网 发布:手机万能遥控器软件 编辑:程序博客网 时间:2024/06/16 17:13
知识总结:
本题在之前的基础上增加案例:统计总共有多少学生报名
主要改造在subject.java中:
1.属性增加:
private Student[]myStudents;
privateintstudentNum;
2.构造方法增加:
//带4参构造:实现对学科名称、编号、学制年限、学生信息赋值
public Subject(Stringname, StringsubjectNo,intsubjectLife,Student[]myStudents) {
// this.subjectName=subjectName;
this.setSubjectName(name);// 安全起见
this.setSubjectNo(subjectNo);
this.setSubjectLife(subjectLife);
this.setMyStudents(myStudents);
}
getter/setter方法增加:
public Student[] getMyStudents() {
if(this.myStudents==null)//如果没有初始化,实例化开辟空间
{
this.myStudents=new Student[200];
}
returnmyStudents;
}
public void setMyStudents(Student[] myStudents) {
this.myStudents =myStudents;
}
//学生个数
public int getStudentNum() {
returnstudentNum;
}
public void setStudentNum(int studentNum) {
this.studentNum =studentNum;
}
add方法增加:
public void addStudent(Studentstu)
{
/*
* 1,将学生保存在数组中
* 2,将学生个数保存到studentNum[]数组当中
*/
//1.
for(inti=0;i<this.getMyStudents().length;i++)
{
if(this.getMyStudents()[i]==null)//找到空地,插入学生
{
this.getMyStudents()[i]=stu;
//2.
this.studentNum=i+1;
return;
}
}
}
subject.java
package com.imooc.model;/** * 专业类 * @author zhang ziwei * */ public class Subject {// 成员属性:学科名称,学科编号,学制年限,报名选修的学生信息、报名选修的学生个数private String subjectName;private String subjectNo;private int subjectLife;private Student[] myStudents;private int studentNum;//无参构造public Subject() {}//带3参构造:实现对学科名称、编号、学制年限赋值public Subject(String name, String subjectNo, int subjectLife) {// this.subjectName=subjectName;this.setSubjectName(name);// 安全起见this.setSubjectNo(subjectNo);this.setSubjectLife(subjectLife);}//带4参构造:实现对学科名称、编号、学制年限、学生信息赋值public Subject(String name, String subjectNo, int subjectLife,Student[] myStudents) {// this.subjectName=subjectName;this.setSubjectName(name);// 安全起见this.setSubjectNo(subjectNo);this.setSubjectLife(subjectLife);this.setMyStudents(myStudents);}/** * 获取选修专业的学生信息的,如果保存的学生信息未被初始化,则先初始化长度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;}// 名称public void setSubjectName(String subjectName) {this.subjectName = subjectName;}public String getSubjectName() {return this.subjectName;}// 科目public String getSubjectNo() {return subjectNo;}public void setSubjectNo(String subjectNo) {this.subjectNo = subjectNo;}// 学制年限public int getSubjectLife() {return subjectLife;}public void setSubjectLife(int subjectLife) {if (subjectLife <= 0) {return;}this.subjectLife = subjectLife;}/** * 专业介绍的方法 * * @return 专业介绍的相关信息,包括名称、编号、年限 */public String info() {String str = "专业信息如下:\n专业名称:" + this.getSubjectName() + "\n专业编号:" + this.getSubjectNo() + "\n学制年限:"+ this.getSubjectLife();// 对于很长的字符串打印可以用command+shift+f(ctrl+shift+f)格式化使得格式更好看return str;}public void addStudent(Student stu){/* * 1,将学生保存在数组中 * 2,将学生个数保存到studentNum[]数组当中 *///1.for(int i=0;i<this.getMyStudents().length;i++){if(this.getMyStudents()[i]==null)//找到空地,插入学生{this.getMyStudents()[i]=stu;//2.this.studentNum=i+1;return;}}} }
Student.java:
package com.imooc.model;public class Student {// 成员属性:学号,姓名,性别,年龄private String student_id;private String student_name;private String student_sex;private int student_age;//实现关联学生,学科关联的,解决方法3:将专业信息作为成员属性存在private Subject student_subject;//注意,类型是一个对象// 无参数构造public Student() {super();}// 4参构造,实现对学号,姓名,年龄赋值,创建对象的赋值public Student(String student_id, String student_name, String student_sex, int student_age,Subject student_subject) {this.setStudent_id(student_id);this.setStudent_name(student_name);this.setStudent_sex(student_sex);this.setStudent_age(student_age);this.setStudent_subject(student_subject);}//3参构造,实现对学号,姓名,年龄赋值public Student(String student_id, String student_name, String student_sex, int student_age) {this.setStudent_id(student_id);this.setStudent_name(student_name);this.setStudent_sex(student_sex);this.setStudent_age(student_age);}// getter/setter接口public String getStudent_id() {return student_id;}public void setStudent_id(String student_id) {this.student_id = student_id;}public String getStudent_name() {return student_name;}public void setStudent_name(String student_name) {this.student_name = student_name;}public String getStudent_sex() {return student_sex;}public void setStudent_sex(String student_sex) {// 限制性别只能是男或者女,反之我们强制性男if (student_sex.equals("男") | student_sex.equals("女")) // 也可以写成(student_sex="男"student_sex="女"){this.student_sex = student_sex;} elsethis.student_sex = "男";}public int getStudent_age() {return student_age;}public void setStudent_age(int student_age) {if (student_age <= 60 & student_age >= 10) {this.student_age = student_age;} elsethis.student_age = 18;// 强制赋值}/** * 获取专业对象,如果没有实例化,先实例化再返回 * @return 专业对象信息 */public Subject getStudent_subject(){ if(this.student_subject==null)//防止getStudent_subject()是没有实例化的{this.student_subject=new Subject();//无参构造的重要性体现出来}return student_subject;}public void setStudent_subject(Subject student_subject) {this.student_subject = student_subject;}/**无参 * 学生自我介绍 * * @return 自我介绍的信息,包括姓名,学号,性别,年龄 */public String introduction() {String str = "学生信息如下:\n姓名:" + this.getStudent_name() + "\n学号:" + this.getStudent_id() + "\n性别:"+ this.getStudent_sex() + "\n年龄:" + this.getStudent_age()+"\n所报专业名称:" + this.getStudent_subject().getSubjectName() + "\n学制年限:"+ this.getStudent_subject().getSubjectLife();//!!尤其注意这种表示先调用对象,再通过对象调用方法return str;}/**解决方法1:参数传参 * 学生自我方法介绍,实现学生学科相关联 * @param subject_name * @param subject_life * @return 自我介绍的信息,包括姓名,学号,性别,年龄,所学专业名称,学制年限 */public String introduction(String subject_name, int subject_life) {String str = "学生信息如下:\n姓名:" + this.getStudent_name() + "\n学号:" + this.getStudent_id() + "\n性别:"+ this.getStudent_sex() + "\n年龄:" + this.getStudent_age() + "\n所报专业名称:" + subject_name + "\n学制年限:"+ subject_life;return str;}/**解决方法2:对象传参 * 学生自我方法介绍,实现学生学科相关联 * @param mySubject(构建了一个对象) * @return自我介绍的信息,包括姓名,学号,性别,年龄,所学专业名称,学制年限 */public String introduction(Subject mySubject){String str = "学生信息如下:\n姓名:" + this.getStudent_name() + "\n学号:" + this.getStudent_id() + "\n性别:"+ this.getStudent_sex() + "\n年龄:" + this.getStudent_age() + "\n所报专业名称:" + mySubject.getSubjectName() + "\n学制年限:"+ mySubject.getSubjectLife();return str;}}
SchoolTest.java:
package com.imooc.test;import com.imooc.model.*;//导入所有类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 stu1=new Student("cs6518822","刘华华","女",20); System.out.println(stu1.introduction()); System.out.println("====================================="); //测试关联学生1,方法中传入参数 Student stu2=new Student("cs6518732","张子蔚","男",17); System.out.println(stu2.introduction("计算机科学与应用",4)); System.out.println("====================================="); //测试关联学生2,方法中传入对象 Student stu3=new Student("cs6518797","胡京督","男",21); System.out.println(stu3.introduction(sub1)); System.out.println("====================================="); //测试关联学生3,构造方法中传入对象 Student stu4=new Student("cs6518779","刘凯瑞","男",20,sub1); System.out.println(stu4.introduction()); System.out.println("====================================="); //测试指定专业的中到底有多少学生报名 sub1.addStudent(stu1); sub1.addStudent(stu2); sub1.addStudent(stu3); sub1.addStudent(stu4); System.out.println("计算机科学与应用的专业中已有:"+sub1.getStudentNum()+"学生进行报名");}}
执行情况:(最后一排显示报名总数)
- Java:封装案例(续)
- Java:封装案例(上)
- Java:封装案例(下)
- Java:封装案例(再续)
- 【log4j2】简化封装(代码案例)
- Java基础与案例开发详解の抽象和封装
- java面向对象的封装、继承、多态案例
- Android 之路14---Java基础封装案例
- 彩票案例-封装知识点
- 动画封装小案例
- java(一)-封装
- sax解析案例(javabean封装xml文档数据)
- libghttp安装及使用封装案例(httpClient)
- java的封装(如何封装类)
- 封装方法—库存案例
- java小案例(1)
- 9、Java反射(案例)
- Java 实验案例(多态)
- 新手注意
- linux文本编辑vim-full
- 关于异步加载资源、plist的一些注意事项
- T13735 fateice-string洛谷八连测2
- [seetaface] installation log
- Java:封装案例(续)
- 记录
- 利用python做矩阵的简单运算(行列式、特征值、特征向量等的求解)
- 51nod 1344 走格子(贪心)
- C++之罗马数字转换为整型数字(12)---《那些奇怪的算法》
- 《阿里巴巴Java开发规约》插件全球首发!
- 字符数据的输出
- 数据库多表查询之 where & INNER JOIN
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去