版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目四Teacher类与对象的使用
【项目描述】定义并测试一个Teacher类,包含的属性有“教工号”、“姓名”、“性别”、“基本工资”和“奖金”;包含方法:1)打印基本信息。2)计算“基本工资”和“奖金”的和。要求将属性封装起来,并对外提供公共的setter和getter方法以访问被封装属性。【任务分解】
要实现本项目功能,我们可以分为以下三个任务来完成:1.Teacher类的创建。2.调用构造方法创建Teacher类对象。
3.使用setter和getter方法访问被封装属性。【任务描述】
任务4-1:创建一个Teacher类,包含的属性有“教工号”、“姓名”、“性别”、“基本工资”和“奖金”;包含方法:1)打印基本信息。2)计算“基本工资”和“奖金”的和。[跳至解题思路]任务一Teacher类的创建
[必备知识】
1.面向对象与面向过程的区别
面向过程程序设计是,基于功能分解的结构化程序开发过程,其对用户需求变化的适用性差。而面向对象技术,是将客观世界的一个事物看作一个对象。每个对象都有自己的属性和行为。面向对象的三大特征是封装、继承和多态。采用面向对象技术即使用户需求发生改化,也可以很好地适应用户需求的变化。2.类与对象的关系
类与对象是面向对象。类是对某一类事物的描述,是抽象的,概念上的定义。对象即个体,也称为实例。类是对象的模板,对象是按照模板产生出来的实例。
3.类的定义格式
类是由成员变量和成员方法组成的。成员变量是描述类的特征,也称为属性;成员方法则是描述类的行为。类是用class关键字去定义的。
类的定义格式如下:
[格式4-1类的定义]
class类名称{
数据类型成员变量1;//声明成员变量1
数据类型成员变量2;//声明成员变量2
……
public返回类型方法名(参数列表){//声明成员方法
语句1;
语句2;
……
[return表达式]
}
}
说明:
(1)类名要遵循标志符的命名规则,并且每个单词首字母要大写。
(2)在一个类中可包含多个成员属性和成员方法。
(3)类是不能直接使用的,需要产生对象。成员变量:也称成员属性,是在类以内方法以外定义的变量。局部变量:是在类的方法中定义的变量或方法中的参数。4.成员变量和局部变量的区别:
两者的主要区别在于作用域范围不同,成员变量的作用域范围是整个类。局部变量作用域范围是定义它的方法内部。示例1:局部变量的作用域范围。
publicclassExample4_1{
intsum;
publicvoidmethod1(intx,inty){ intresult=x+y; sum=result; }publicvoidmethod2(){ intc; c=x;//此行代码出错,不能使用method1方法的局部变量x sum=10; } }
示例分析:在本例中,sum是成员变量,它的作用域范围是整个类,所以在method1()和method2()两个方法中均可以使用。x、y和result是method1()方法的局部变量,在method2()中使用了x是非法的。示例2:成员变量和局部变量同名的情况。publicclassExample4_2{
staticinta=3;
publicstaticvoidmain(Stringargs[]){
inta=200;
System.out.println("a="+a);
}}示例分析:本例的输出结果是a=200。原因是当成员变量和局部变量同名时,在局部变量的作用范围成员变量隐藏。重温题目要求【解题思路】
1.用class关键字定义一个Teacher类。2.往Teacher类中添加属性:教工号teacherId、姓名name、性别sex、基本工资salary和奖金wage。3.往Teacher类中添加print()和total()方法,分别用于输出基本信息和求工资总和。【任务透析】
classTeacher{
StringteacherId;
//声明教工id属性
Stringname;
//声明姓名属性
Stringsex;
//声明性别属性
floatsalary;
//声明基本工资属性
floatwage;
//声明奖金属性
publicvoidprint(){//定义print方法用于输出教工的基本信息
System.out.println("教工号:"+teacherId+",姓名:"+name+",性别:"+sex);
}
publicfloattotal(){
returnsalary+wage;
}
}
方法print()前的修饰符void表示该方法不返回任何值,而total()方法前的float表示该方法调用完毕会返回一个单精度的浮点数。【课堂提问】★面向对象的三大特征是什么?★类与对象的关系?★类的组成?【现场演练】定义一个Student类,包含的属性有“学号”、“姓名”和“C语言”、“计算机应用基础”和“英语”三门课程成绩。并声明一个求三门课程平均分的方法。重温题目要求任务二调用构造方法创建Teacher类对象
【任务描述】任务4-2:声明一个测试类ClassDemo1Test,在测试类中创建一个Teacher类的对象,对各成员属性进行初始化,并调用成员方法输出该对象的信息。跳至解题思路【必备知识】在任务1中已经创建好一个Teacher类,要想使用一个类,必须要创建该类的对象。1.对象的创建格式[格式4-2对象的创建]格式一:类名对象名=null;//声明对象对象名=new类名();
//实例化对象格式二:类名对象名=new类名();//声明对象的同时实例化对象2、构造方法
构造方法就是和类名相同的方法。构造方法是用来完成在创建对象时,对对象中的变量和方法等进行初始化操作的。(1)构造方法名和类名相同。(2)构造方法是没有返回值的,但也不能用void声明。(3)构造方法的主要作用是对对象初始化。(4)构造方法不能显式地直接调用。(new)(5)一个类中可以定义多个构造方法,也就是构造方法是支持重载,但各构造方法的参数表不相同。
示例3:创建对象。
classPerson{
Stringname;
floathight;
public
voidsmile(){
System.out.println(“姓名:”+name+“身高”+hight);
}
}
public
classExample4_3{
public
static
voidmain(Stringargs[]){
Personp1=newPerson();//创建并实例化对象p1
Personp2=newPerson();//创建并实例化对象p2
}
}
示例分析:本例在main方法中实例化了两个Person对象,对象名称为p1、p2。其中,对象名称保存在栈内存中,对象的具体内容保存在堆内容中。new关键字的作用是为对象开辟堆内存空间。内存分配如图4.1所示创建类的对象后,就可以使用对象访问属性和方法。(1)访问成员变量格式:
对象名.成员变量名3、对象的使用
(2)访问成员变量格式:
对象名.成员方法名([参数])和数组一样,类属于引用数据类型。引用数据类型是指多个栈内存可以同时指向同一段堆内存空间。4、对象的引用传递示例4:对象的引用传递。【解题思路】 1.声明一个public的测试类ClassDemo1Test。2.实例化一个Teacher类对象,并对其成员变量进行初始化。3.调用对象的成员方法,输出该教师对象的信息。【任务透析】
publicclassClassDemo4_2Test{ publicstaticvoidmain(Stringargs[]){ doublepay; Teachert=newTeacher(); t.teacherId="112001"; ="梁宇轩"; t.sex="男"; t.salary=-2500f; t.wage=300f; t.print(); pay=t.total(); System.out.println("总工资为:"+pay); } }
程序运行结果显示总工资为负数,这显然是不合法的数据。该如何避免这种错误的发生呢?因为在任务4-1中,Teacher类的属性没有封装,可以被其他类直接访问。正确的做法是将要保护的属性私有化,即用关键字private修饰,增加一些方法来访问这些属性。详见任务4-3。任务三使用setter和getter方法访问被封装属性
【任务描述】
任务4-3:对Teacher类的所有属性进行封装,并为每个属性创建一对getter和setter方法。通过setter方法对属性设置值及getter方法获取属性值。[跳至解题思路]【必备知识】1.封装的概念封装包含两层含义:第一层是将类的属性和行为封装在一个类中,给外界提供访问属性的接口。第二层含义是将类的属性的访问权限用关键字private去修饰。用private修饰的属性只能在本类中访问,类以外是无法直接访问的,但可以通过类的公有方法去访问。2.封装的目的封装的目的就是保护内容,保证某些属性或方法不被外部看见。3.setter和getter方法被封装的属性是不能由对象直接访问的,只能通过setter和getter方法去访问。setter方法是用于设置被封装属性的值;getter方法是用于获取被封装属性的值。【解题思路】1.将Teacher类所有属性的访问权限修改为private。2.对每一个属性创建一对setter和getter方法,通过setter方法对属性设置值及getter方法获取属性值。3.要避免用户设置不合法的属性值,我们只需在setter方法中添加对属性值进行检查的功能即可。重温题目要求【任务透析】packagecom;classTeacher{ privateStringteacherId; privateStringname; privateStringsex; privatefloatsalary; privatefloatwage; publicStringgetTeacherId(){ returnteacherId; } publicvoidsetTeacherId(StringteacherId){ this.teacherId=teacherId; } publicStringgetName(){ returnname; }publicvoidsetName(Stringname){ =name; } publicStringgetSex(){ returnsex; } publicvoidsetSex(Stringsex){ this.sex=sex; } publicfloatgetSalary(){ returnsalary; } publicvoidsetSalary(floatsalary){ if(salary>0) this.salary=salary; } publicfloatgetWage(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年产8000吨不锈钢制品项目可行性研究报告模板-立项拿地
- 《出水堰的设计》课件
- 年产1.5亿只离网照明模组旋冲一体机升级改造项目可行性研究报告写作模板-拿地申报
- 跨文化交际(山东外贸职业学院)知到智慧树答案
- XX乡村旅游示范区公共服务设施建设可行性研究报告
- 肉羊养殖基地新建项目可行性研究报告
- 农产品冷链物流项目建设可行性研究报告
- 《智能锁安装流程》课件
- 2015年天津市中考满分作文《晒出我的家风》
- 《散文创作与研究(10543)》自考考试题库(含典型题)
- 龈下刮治与根面平整ppt课件
- 高中物理说题稿(共2页)
- 药品养护汇总分析报表
- 水运工程施工组织设计
- 斑蝥的药用价值与养殖
- 【实用】药事管理工作制度执行情况-质量持续改进督查记录表√
- 支原体肺炎教学查房.ppt
- 二乙医院评审汇报
- 【精品】简约大气商务工作汇报模板PPT
- 小学入门数独100题(简单)
- 云南傣家竹楼PPT课件
评论
0/150
提交评论