目录

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();}}

面向对象——封装继承编程题相关推荐

  1. 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)

    面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...

  2. 面向对象封装继承多态五大基本原则魔法方法反射

    目录 面向对象 三大基本特征 五大基本原则 魔法方法 反射 面向对象 什么是面向对象 使用模板的思想,将世界万事万物使用对象来表示一个类型 面向对象和面向过程的区别: 面向对象的不就是使用程序处理事情 ...

  3. (十)Core Java 面向对象(封装,继承,多态,接口) -02 (96)

     目录 :        24 ). 面向对象(聚集关系) 25 ). 面向对象(子父类中变量的特点) 26 ). 面向对象(子父类中函数的特点-覆盖) 27 ).  面向对象(子父类中构造函数的特点 ...

  4. 黑马程序员_JAVA之面向对象(封装,继承和多态)

    ------- android培训.java培训.期待与您交流!---------- 面向对象 一.面向对象概述 定义: 面向对象(Object Oriented,OO)是软件开过过程中使用一种思维方 ...

  5. java接口继承编程题_JavaSE习题 继承接口和泛型

    问答题: 1.子类在什么情况下可以继承父类友好成员? 答:在同一个包内 2.子类通过怎样的方法可以隐藏继承的成员变量? 答:声明一个与父类相同变量名的成员变量 3.子类重写继承的方法原则是什么? 答: ...

  6. 猜丁壳(面向对象 封装 继承 多态)

    创建三个包: util包中的Constans是用来存储常量的: util包中的MyUtil是用来存储工具类的: service包中的Player定义玩家的共同属性及方法: service包中的Comp ...

  7. c语言编程 菲薄拉,C语言设计模式-封装-继承-多态

    快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...

  8. 第三模块 面向对象网络并发编程 | day17 面向对象基础

    第三模块 面向对象&网络&并发编程 从今天开始,我们将进入系列课程第3个模块的的学习,此模块包含如下三大部分知识: 面向对象,Python中支持两种编程方式来写代码,分别是:函数式编程 ...

  9. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

最新文章

  1. linux shell之cut用法
  2. [MySQL光速入门]012 作业解答
  3. 【专升本计算机】最新甘肃省专升本考试C语言部分复习题带答案
  4. _用WSL,MobaXterm,Cmder配置linux开发环境
  5. classcastexception异常_让你为之颤抖的Java常见的异常exception
  6. Linux Mysql5.6安装
  7. 【第三方软件】利用WIN8系统自带的绘图软件获取图像信息(位置和颜色信息)
  8. oracle建表类型,oracle 建表类型以及约束
  9. 一米村长讲故事机器人_主持人李锐推出“村长讲故事”APP,已入驻喜马拉雅
  10. mysql stmt
  11. matlab求解零输入响应,matlab求解零状态零输入响应
  12. 线上编程学院codecademy
  13. Quorum简介部署
  14. Android手机号码获取问题 用APN来获取手机号
  15. matlab 读取ENVI中*.img格式图片代码
  16. android下拉框代码,Android下拉列表spinner的实例代码
  17. 文件服务器——NFS
  18. 如何让控件在LinearLayout布局中置底显示
  19. Java设计模式及应用场景之《单例模式》
  20. Android获取系统信息

热门文章

  1. 微信H5分享接口问题(避开99%坑)
  2. Win10系统,如何让我的电脑显示在桌面上?
  3. ff14显卡测试软件,FF14官方跑分软件
  4. 我的世界java版盔甲架_我的世界:知道了这些盔甲架的用法,你就是今年最靓的仔!...
  5. Epic安装新Epic Online Services内部模块报错EOS-ERR-1603解决
  6. Material Design(1)
  7. Cadence Allegro如何修改栅格大小
  8. 实施有效有价值的CI / CD流水线实践分享
  9. Python代码实现PID控制
  10. 无锡会计培训——出纳要考初级会计吗?