700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 面向对象——封装继承编程题

面向对象——封装继承编程题

时间:2019-08-21 08:16:07

相关推荐

面向对象——封装继承编程题

目录

1.案例:根据以下数据完成案例实现

Student类

Subject类

测试类

2.编写自定义类实现图书信息设置

测试类

1.案例:根据以下数据完成案例实现

学校开设计算机专业,专业编号为J0001,学制4年,现在3名学员都报名学习了这个专业,数据信息如下表:

信息分析

1.专业类:

属性:专业名称,编号,学制年限

方法:介绍专业相关信息

2.学生类:

属性:专业名称,编号,学制年限

方法:介绍学生相关信息

3.两个类的信息关联(实现代码尽可能少)

方案1:学生类介绍方法中,添加专业名称,学制年限两个参数;

方案2:学生类介绍方法中,添加一个专业对象作为参数,从中获取专业名称,学制年限;

方案3:学生类中,添加一个专业对象作为属性,从中获取专业名称,学制年限

Student类

public class Student {private String studentId;private String studentName;private String studentSex;private int studentAge;private Subject studentSubject; // 注意!// 无参构造方法public Student() {}public Student(String studentId, String studentName, String studentSex, int studentAge) {super();this.setStudentId(studentId);this.setStudentName(studentName);this.setStudentSex(studentSex);this.setStudentAge(studentAge);}// 带参构造,实现对全部参数的赋值public Student(String studentId, String studentName, String studentSex, int studentAge, Subject studentSubject) {super();this.setStudentId(studentId);this.setStudentName(studentName);this.setStudentSex(studentSex);this.setStudentAge(studentAge);this.setStudentSubject(studentSubject);}public String getStudentId() {return studentId;}public void setStudentId(String studentId) {this.studentId = studentId;}public String getStudentName() {return studentName;}public void setStudentName(String studentName) {this.studentName = studentName;}public String getStudentSex() {return studentSex;}/*** 给性别赋值,限制只能是“男”或“女”,否则强制赋值为“男”* * @param studentSex 传入的性别*/public void setStudentSex(String studentSex) {if (!(studentSex == "男" || studentSex == "女")) {this.studentSex = "男";} elsethis.studentSex = studentSex;}public int getStudentAge() {return studentAge;}/*** 给年龄赋值,限制在10——100之间,反之就设置为18* * @param studentAge传入的年龄*/public void setStudentAge(int studentAge) {if (studentAge < 10 || studentAge > 100) {this.studentAge = 18;} elsethis.studentAge = studentAge;}/*** 获取专业对象,若没有实例化,则先实例化后再返回* * @return 专业对象信息*/public Subject getStudentSubject() {if (studentSubject == null)this.studentSubject = new Subject();return studentSubject;}public void setStudentSubject(Subject studentSubject) {this.studentSubject = studentSubject;}/*** 法1 在方法中添加1个专业对象作为参数,通过其属性获得相关信息* 更简单,获得参数方便* @param sub1* * @return自我介绍的信息,包括姓名、学号、性别、年龄*/public String introduction(Subject mySubject) {String str = "学生信息如下:\n姓名:" + this.getStudentName() + "\n学号:" + this.getStudentId() + "\n性别:"+ this.getStudentSex() + "\n年龄:" + this.getStudentAge() + "\n所报专业名称:" + mySubject.getSubjectName()+ "\n学制年限:" + mySubject.getSubjectYear() + "\n专业编号:" + mySubject.getSubjectId();return str;}/*** 法2 在类中添加专业作为属性,通过其属性获得相关信息* 关联性更强*/public String introduction() {String str = "学生信息如下:\n姓名:" + this.getStudentName() + "\n编号:" + this.getStudentId() + "\n性别:"+ this.getStudentSex() + "\n年龄:" + getStudentAge() + "\n所报专业名称:"+ this.getStudentSubject().getSubjectName() + "\n学制年限:" + this.getStudentSubject().getSubjectYear()+ "年" + "\n专业编号:" + this.getStudentSubject().getSubjectId();return str;}/*** 法3 在方法中添加2个参数,分别表示专业名称和学制年限* 易理解,但参数列表长* @param subjectName* @param subjectYear* @return*/public String introduction(String subjectName, int subjectYear) {String str = "学生信息如下:\n姓名:" + this.getStudentName() + "\n编号:" + this.getStudentId() + "\n性别:"+ this.getStudentSex() + "\n年龄:" + getStudentAge() + "\n所报专业名称:" + subjectName + "\n学制年限:" + subjectYear+ "年";return str;}}

Subject类

/*** 专业类* @author Terita**/public class Subject {//成员属性:学科名称,学科编号,学制年限,报名选修的学生信息,报名选修的学生个数private String subjectName;private String subjectId;private int subjectYear;private Student[] myStudents; //数组是引用类型,默认初始值是nullprivate int studentNum; //因为数组只能描述空间长度,无法准确描述其数据个数// 无参构造方法public Subject() {}//带参构造public Subject(String subjectName, String subjectId, int subjectYear) {this.subjectName = subjectName; // 赋值方法①this.setSubjectId(subjectId); // 赋值方法②(推荐!)this.setSubjectYear(subjectYear);}// 带参构造方法,实现对属性的全部赋值public Subject(String subjectName, String subjectId, int subjectYear,Student[] myStudents) {this.subjectName = subjectName; // 赋值方法①this.setSubjectId(subjectId); // 赋值方法②(推荐!)this.setSubjectYear(subjectYear);this.setMyStudents(myStudents);}public String getSubjectName() {return subjectName;}public void setSubjectName(String subjectName) {this.subjectName = subjectName;}public String getSubjectId() {return subjectId;}public void setSubjectId(String subjectId) {this.subjectId = subjectId;}public int getSubjectYear() {return subjectYear;}// 限制年限必须>0public void setSubjectYear(int subjectYear) {if (subjectYear <= 0)return; // 结束this.subjectYear = subjectYear;}/*** 获取选修专业的学生信息* 如果学生数组未被初始化,则给它开辟一块空间* @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.getSubjectId() + "\n学制年限:"+ this.getSubjectYear()+"年";return str;}public void addStudents(Student stu) {//1.将学生保存在数组中int i;for (i = 0; i < this.getMyStudents().length; i++) {if (this.getMyStudents()[i]==null) {this.getMyStudents()[i]=stu;//将学生个数保存在studentNumthis.studentNum=i+1;return;}}}}

测试类

public class TestStudent {public static void main(String[] args) {//测试SubjectSubject sub1=new Subject("计算机科学与应用","S100",4);System.out.println(sub1.info());System.out.println("**************************");//测试StudentStudent stu1=new Student("01","张三","你看",200,sub1);System.out.println(stu1.introduction());System.out.println("==========================");Student stu2=new Student("02","李四","男",17);System.out.println(stu2.introduction("计算机科学与应用",4));System.out.println("==========================");Student stu3=new Student("03","王五","女",18);System.out.println(stu3.introduction(sub1));System.out.println("==========================");//测试指定专业中有多少学生报名sub1.addStudents(stu1);sub1.addStudents(stu2);sub1.addStudents(stu3);System.out.println(sub1.getSubjectName()+"专业已有"+sub1.getStudentNum()+"名学生报名");}}

2.编写自定义类实现图书信息设置

任务:

属性:书名、作者、出版社、价格

方法:信息介绍

要求:

1. 设计构造函数实现对属性赋值

2. 设置私有属性,get/set方法实现对属性的访问

3. 限定图书价格必须大于10,如果无效需进行提示,并强制赋值为10

4. 限定作者、书名均为只读属性

5. 信息介绍方法描述图书所有信息

public class Book {// 属性private String name = "平凡的世界";private String author = "路遥";private String publishe;private double price;// 方法// 构造方法// 限定作者、书名均为只读属性public Book(String name,String author,String publishe, double price) {this.name = name;this.author = author;this.publishe = publishe;this.price = price;}// get/set方法实现对属性的访问public String getName() {return name;}public String getAuthor() {return author;}public String getPublishe() {return publishe;}public void setPublishe(String publishe) {this.publishe = publishe;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}// 限定图书价格必须大于10,如果无效需进行提示,并强制赋值为10// 限定作者、书名均为只读属性// 信息介绍方法描述图书所有信息public void show(){System.out.println(getAuthor());System.out.println(getPrice());System.out.println(getName());System.out.println(getPublishe());}}

测试类

public class TestBook {public static void main(String[] args) {//构造方法,创建对象,赋值Book book=new Book("三体","刘慈欣","湖南出版社",0);//图书价格必须大于10,如果无效需进行提示,并强制赋值为10if(book.getPrice()<10){System.out.println("图书价钱较低,增为10元");book.setPrice(10);}//显示所有的信息book.show();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。