手记

3-Java面向对象-封装综合案例

案例简介

通过一个简单的案例具体的实现一下封装。

通过java语言和面向对象的思想,模拟一个场景的实现。

案例: 学校开设了计算机科学与应用这个专业,专业编号: J0001;学制年限: 4年;

现在有三个学生报名了该学校。

实现的效果图:

package cn.mtianyan.computer;public class Subject {    public Subject(String name, String code, int year){        this.setName(name);        this.setCode(code);        this.setYear(year);
    }    public void showInfo(){
        System.out.println("专业信息如下:");
        System.out.println("专业名称: " + this.name);
        System.out.println("专业编号: " + this.code);
        System.out.println("学制年限: " + this.year +"年");
        System.out.println("=====================");
    }    private String name;    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public String getCode() {        return code;
    }    public void setCode(String code) {        this.code = code;
    }    public int getYear() {        return year;
    }    public void setYear(int year) {        this.year = year;
    }    private String code;    private int year;
}
package cn.mtianyan.computer;public class Student {    public Student(String name,String studentID, String sex,int age,Subject subject){        this.setName(name);        this.setStudentID(studentID);        this.setAge(age);        this.setSex(sex);        this.subject = subject;
    }    public void showInfo(){
        System.out.println("==================");
        System.out.println("姓名: "+name);
        System.out.println("学号: "+studentID);
        System.out.println("性别: "+sex);
        System.out.println("年龄: "+age);
        System.out.println("所报专业名称: "+ subject.getName());
        System.out.println("学制年限: "+ subject.getYear());
    }    private String name;    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public String getStudentID() {        return studentID;
    }    public void setStudentID(String studentID) {        this.studentID = studentID;
    }    public String getSex() {        return sex;
    }    public void setSex(String sex) {        this.sex = sex;
    }    public int getAge() {        return age;
    }    public void setAge(int age) {        this.age = age;
    }    private String studentID;    private String sex;    private int age;    private Subject subject;
}
package cn.mtianyan.computer;public class Test {    public static void main(String[] args) {
        Subject subject = new Subject("计算机科学与应用","J0001",4);
        subject.showInfo();
        Student student1 = new Student("张三","S01","男",18, subject);
        student1.showInfo();
        Student student2 = new Student("李四","S02","女",17, subject);
        student2.showInfo();
        Student student3 = new Student("王五","S03","男",18, subject);
        student3.showInfo();
    }
}

运行结果:

上面是我个人的实现.

综合案例

计算机科学与应用是一个对象。 三个学生是三个对象。学科专业类 & 专业类

类:

  1. 专业: 专业名称、编号、学制年限

  2. 学生: 姓名、学号、性别、年龄

编写Subject类

啊啊啊,英语真季二茶,Get到了。Subject是学科。

分包存储: cn.mtianyan.model cn.mtianyan.test

package cn.mtianyan.model;/**
 * 专业类
 * @author mtianyan
 */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 subjectLife) {        // this.subjectName=subjectName;
        this.setSubjectName(subjectName);        this.setSubjectNo(subjectNo);        this.setSubjectLife(subjectLife);
    }    
    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;
    }    // 设置学制年限,限制必须>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
         * */
        //1、将学生保存到数组中
        for(int i=0;i<this.getMyStudents().length;i++){            if(this.getMyStudents()[i]==null){
                stu.setStudentSubject(this);                this.getMyStudents()[i]=stu;                //2、将学生个数保存到studentNum
                this.studentNum=i+1;                return;
            }
        }
    }
}

这里我们的info方法在设计的时候返回String而不是直接在方法内打印,体现了单一职责原则,这样的设计使得这些字符串如果后期不是在控制台打印,而是做其他处理更方便。

编写Student类

package cn.mtianyan.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);
    }    // 多参构造方法,实现对全部属性的赋值
    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.studentAge=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.equals("男") | studentSex.equals("女")){            this.studentSex = studentSex;
        }else {            this.studentSex = "男";
        }

    }    public int getStudentAge() {        return studentAge;
    }    /**
     * 给年龄赋值,限定必须在10--100之间,反之赋值为18
     * 
     * @param 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;
    }
}



作者:天涯明月笙
链接:https://www.jianshu.com/p/8610f0818a99


0人推荐
随时随地看视频
慕课网APP