类的封装实例1

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()+"个学生信息");
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值