类的封装实例1
程序员文章站
2022-05-24 13:14:38
...
package student.com;
/**
* 专业类
* @author Administrator
*
*/
public class Subject {
//成员属性
private String Sub_name;//学科名字
private String Sub_id;//学科编号
private String Sub_year;//学科年限
private Student[] myStudent;//存储学生信息
private int studentNum;//存储学生个数
//无参构造函数
public Subject() {
}
//带参构造函数,实现对属性的全部赋值
public Subject(String Sub_name,String Sub_id,String Sub_year,Student[] mystudent) {
//利用set方法可以避免出错
this.setSub_name(Sub_name);
this.setSub_id(Sub_id);
this.setSub_year(Sub_year);
this.setMyStudent(mystudent);
}
//带参构造函数,实现对属性的部分赋值
public Subject(String Sub_name,String Sub_id,String Sub_year) {
//this.Sub_name=Sub_name;
//this.Sub_id=Sub_id;
//this.Sub_year=Sub_year;
//利用set方法可以避免出错
this.setSub_name(Sub_name);
this.setSub_id(Sub_id);
this.setSub_year(Sub_year);
}
//设置setter/getter方法
/**
* 获取选修专业学生信息,如果保存的学生信息的数组未被初始化,则先初始化长度200,然后再返回
* @return
*/
public Student[] getMyStudent() {
if(this.myStudent==null) myStudent=new Student[100];//对象未被实例化可能出现空指针异常
return myStudent;
}
public void setMyStudent(Student[] myStudent) {
this.myStudent = myStudent;
}
public int getStudentNum() {
return studentNum;
}
public void setStudentNum(int studentNum) {
this.studentNum = studentNum;
}
public String getSub_name() {
return Sub_name;
}
public void setSub_name(String sub_name) {
Sub_name = sub_name;
}
public String getSub_id() {
return Sub_id;
}
public void setSub_id(String sub_id) {
Sub_id = sub_id;
}
public String getSub_year() {
return Sub_year;
}
public void setSub_year(String sub_year) {
Sub_year = sub_year;
}
//显示函数
public void Sub_show() {
System.out.println("专业信息如下:");
System.out.println("专业名称:"+this.getSub_name());
System.out.println("专业编号:"+this.getSub_id());
System.out.println("学制年限:"+this.getSub_year());
System.out.println("========================");
}
//为了提高代码复用性,满足单一职责原则
/**
* 专业信息的方法
* @return 专业信息
*/
//以字符串返回的方式更符合多平台的展示
public String info() {
String str="专业信息如下:"+"\n"+"专业名称:"+this.getSub_name()+"\n"+"专业编号:"+this.getSub_id()+"\n"+"学制年限:"+this.getSub_year();
return str;
}
//将学生信息保存到数组中
public void addStudent(Student student)//传参是传的Student类中的对象,以Student类中对象所有属性作为一个整体保存在一个数组中
{
//studentNum=0;
for(int i=0;i<this.getMyStudent().length;i++) {
if(this.getMyStudent()[i]==null) {
//双向关联
student.setStudentSubject(this);
this.getMyStudent()[i]=student;
//个数存到studentNum中
this.studentNum=i+1;
return;
}
}
}
}
package student.com;
/**
*学生类
*/
public class Student {
//成员属性
private String name;
private String id;
private String sex;
private int age;
//方案三 在类中添加专业对象作为属性,通过其属性获得相关信息
private Subject studentSubject;
//带类对象作为参数的构造方法
public Student(String name,String id,String sex,int age,Subject studentSubject) {
this.setName(name);
this.setId(id);
this.setSex(sex);
this.setAge(age);
this.setStudentSubject(studentSubject);
}
//带参构造函数
public Student(String name,String id,String sex,int age) {
this.setName(name);
this.setId(id);
this.setSex(sex);
this.setAge(age);
}
/**
* 获取专业对象,如果没有实例化,则先实例化再返回
* @param studentSubject 专业对象信息
*/
public Subject getStudentSubject() {
//避免对象为空,实例化对象
if(studentSubject==null) {
this.studentSubject=new Subject();
}
return studentSubject;
}
public void setStudentSubject(Subject studentSubject) {
this.studentSubject = studentSubject;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
if(sex.equals("男")) {
this.sex="男";
}else {
this.sex="女";
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
if((age>=10)&&(age<=100)) {
this.age = age;
}else {
this.age=18;
}
}
//无参构造方法
public Student() {
}
public void show() {
System.out.println("学生信息如下:");
System.out.println("姓名:"+getName());
System.out.println("学号:"+getId());
System.out.println("性别:"+getSex());
System.out.println("年龄:"+getAge());
System.out.println();
}
/**
* 学生自我介绍的方法
* @return 学生自我介绍的方法,包括姓名、学号、性别、年龄
*/
public String Info() {
String str="学生信息如下:"+"\n"+"姓名:"+this.getName()+"\n"+"学号:"+getId()+"\n"+"性别:"+getSex()+"\n"+"年龄:"+getAge()+"\n";
return str;
}
//类之间进行关联
//方案一 在方法中添加两个参数,分别表示专业名称和专业年限
/**
* 学生自我介绍的方法
* @param Sub_name 所报专业名称
* @param Sub_year 学制年限
* @return 学生自我介绍的方法,包括姓名、学号、性别、年龄、所报专业名称、学制年限
*/
public String Info(String Sub_name,String Sub_year) {
String str="学生信息如下:"+"\n"+"姓名:"+this.getName()+"\n"+"学号:"+getId()+"\n"+"性别:"+getSex()+"\n"+"年龄:"+getAge()+
"\n"+"所报专业名称:"+Sub_name+"\n专业年限:"+Sub_year;
return str;
}
//方案二 在方法中添加对象作为参数,通过对象调用所有成员属性和方法获得相关信息
/**
* 学生自我介绍的方法
* @param sub 所选专业的对象
* @return 学生自我介绍的方法,包括姓名、学号、性别、年龄
*/
public String Info(Subject sub) {
String str="学生信息如下:"+"\n"+"姓名:"+this.getName()+"\n"+"学号:"+getId()+"\n"+"性别:"+getSex()+"\n"+"年龄:"+getAge()+
"\n"+"所报专业名称:"+sub.getSub_name()+"\n专业年限:"+sub.getSub_year();
return str;
}
//方案三 在类中添加专业对象作为属性,通过其属性获得相关信息
public String Infor() {
String str="学生信息如下:"+"\n"+"姓名:"+this.getName()+"\n"+"学号:"+getId()+"\n"+"性别:"+getSex()+"\n"+"年龄:"+getAge()+
"\n"+"所报专业名称:"+this.getStudentSubject().getSub_name()+"\n专业年限:"+this.getStudentSubject().getSub_year();
//先取到专业信息,再取信息里的名称、年限
return str;
}
}
package student.com;
/**
*测试类
*/
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Subject one=new Subject("计算机科学与应用","J0001","4年");
//one.Sub_show();
//System.out.println(one.info());
//System.out.println();
Student two=new Student("张三","S01","男",18);
Student three=new Student("李四","S02","女",17);
Student four=new Student("王五","S03","男",18);
Student five=new Student("周三","S04","男",19,one);
one.addStudent(two);
one.addStudent(four);
System.out.println(one.getSub_name()+"的专业中"+"一共存入"+one.getStudentNum()+"个学生信息");
}
}