版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 Java面向对象程序设计,4.1 编写“人”类 知识要点 类与对象的概念 类的组成 构造方法 类的方法和属性的引用 实例 编写程序,实现“人”类,1详细设计 class Human 定义类属性; 定义Human方法; 定义introduce 方法; 2编码实现 1) 定义类属性 语句: String code; String name; String birth; 分析:就象命令行参数的类型一样,这里把“人”类的编号code、姓名name和出生日期birth都定义为String(字符串)类型。 2) 定义Human方法 语句: Human(String nm) name = nm; 分
2、析:Human方法与类同名,这种方法称为构造方法。就象方法main(String args)可以接收来自命令行的参数一样,扩号()内的String nm表示该方法可以接收调用者的参数,这里的参数nm称为形式参数,简称形参。调用者传送的参数称为实际参数,简称实参。 3) 定义introduce 方法 语句: void introduce() System.out.println(I am + name); 分析:除构造方法以外,Java的方法都要求返回一个值。如果不返回任值,需用void修饰。该方法输出对象的姓名。 3源代码 略,4测试与运行,见下面的Human测试类HumanTest源程序。
3、public class HumanTest public static void main(String args) Human p = new Human(Smith); roduce();,5技术分析,1) 类和对象 2) 类的组成 Java程序由一系列类组成,类包括属性和成员函数,很多时候也把成员函数称为方法(method)。 3) 构造方法 类中有和类名相同的方法,称为构造方法,用于实例化一个对象。 4) 类的方法和属性的引用 对象用“.”运算符访问其成员,包括类的属性和方法,6. 问题与思考,对本节实例中的类Human增加两个方法void setCode(String s
4、tr)和String getCode(),分别用于设置编码code和获取编码code。并用下面的程序测试结果。 public class HumanTest public static void main(String args) Human p = new Human(Smith); p.setCode(001); System.out.println( + 的编码是: + p.getCode();,4.2 把类打包,知识要点 包 Eclipse工具 实例 将前一节的类Human放在目录mypackagecreature下,并测试运行,1详细设计 把类放入目录mypackagec
5、reature中,程序结构和上一节基本一致。 2编码实现 为把Human放在包mypackage.creature内,需在源程序Human.java的第一行加上package mypackage.creature。 3源代码 略,4测试与运行,见下面测试程序: import mypackage.creature.*; public class HumanTest public static void main(String args) Human p = new Human(Smith); roduce();,5技术分析,1) 包 各种操作系统平台对文件的管理都是以目录树的形式的组织
6、,但是它们对目录的分隔表达方式不同,为了区别于各种平台,Java中采用了.来分隔目录,从而引入包的概念。 2) Eclipse工具 Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。其本身只是一个框架和一组服务,用于通过插件组件构建开发环境,6. 问题与思考,1) 什么是默认包,默认包中主要包含了哪些类。 2) 编写程序,用String的split方法从一个字符串中,分解单词。 3) 编写类Human和测试类HumanTest。其中Human放在包mypackage中,测试类HumanTest放在包mypackage.test中,4.3 为每个“人”生成唯一编号,知识要点
7、静态变量 静态方法 实例 编写程序,为每个“人”生成唯一编号,1详细设计 在Human类中定义了一个静态变量basecode。类方法增加了设置编号的方法setCode()和获取某个人编号的方法getCode()等。 2编码实现 1) 定义静态变量 语句: static String basecode=000; 分析:为了为每一个对象生成连续的不重复的编码,basecode从初始编码000开始,每个对象在basecode基础上递增,成为自己的编码。basecode要保存最新编码,所以定义成静态变量,以便每个对象都可以访问。 2) 定义setCode 方法 语句: void setCode() i
8、nt icode; icode = Integer.parseInt(basecode) + 1; if (icode10) basecode = 00 + Integer.toString(icode); else if (icode100) basecode = 0 + Integer.toString(icode); else basecode = Integer.toString(icode); code = basecode; 分析:icode在方法setCode()中定义,是局部整型变量。编码是字符型,不能算术运算,所以借助icode增1操作,再转换回字符串。方法Integer.p
9、arseInt()把字符串转换成整型,Integer.toString()把整型转换为字符型。 3) 定义getCode 方法 语句: String getCode() return code; 分析:该方法用return语句返回编码code。因code是String类型,所以用String修饰该方法。调用该方法,可以得到某“人”的编码。 3源代码 略,4测试与运行,测试程序如下: public class HumanTest public static void main(String args) Human p1 = new Human(Smith); p1.setCode(); Syst
10、em.out.print(p1.code+ +); System.out.println( 序列码是: + Human.basecode); Human p2 = new Human(Jane); p2.setCode(); System.out.print(p2.code + +); System.out.println( 序列码是: + Human.basecode);,5技术分析,1) 静态变量 静态变量实质上就是一个全局变量,该类所有的实例变量都可以访问到静态变量。 2) 静态方法 静态方法又叫类方法,它属于整个类。 Java的main()方法必须定义为静态
11、的,意味着告诉Java编译器,这个方法不需要创建一个此类的对象即可使用。但在main()方法中去访问成员变量和方法都会出错,6. 问题与思考,1) 编写程序,模拟掷两个骰子的数字。测试是否只出现2,12内的整数,试问这些数字出现的几率相同吗? 2) 编写程序,读取系统日期的年份。 3) 在类Human中增加整数类型的属性age表示年龄,编写方法calcAge(),根据出生日期birth计算年龄,4.4 在“人”类基础上编写教师类Teacher,知识要点 类的继承 访问控制符 this和super 实例 在“人”类的基础上编写“教师,1详细设计 类Teacher从Human继承,增加了属性工资(
12、salary)。除了对对象进行实例化的构造方法Teacher()外,还包括设置工资(setSalary()和获得教师的工资(getSalary()的两个方法。注意到在声明类Teacher的同时,用了extends Human,表明Teacher继承了Human。使得类Teacher仍然有编码、姓名等属性和方法。 2编码实现 1) 定义构造方法Teacher 语句: Teacher(String nm)super(nm); 分析:该构造方法实例化一个教师时,需要命教师的姓名。super在这里指父类的构造方法,即Human(String nm)。Teacher(String nm)是通过调用父类的
13、Human(String nm)来实现的。 2) 定义方法setSalary() 语句: void setSalary(int duty) if (duty = 1) salary = 4000; if (duty = 2) salary = 3000; if (duty = 3) salary = 2000; 分析:该方法根据教师的行政级别设置工资,各级别教师工资情况如下表。 3) 定义方法getSalary() 语句: float getSalary() return salary; 分析:该方法用return语句返回编码salary。因salary是float类型,所以用float修饰该
14、方法。 3源代码 略,4测试与运行,为了测试程序如下: public class TeacherTest public static void main(String args) Teacher t = new Teacher(张国兵); t.setCode(); t.setSalary(1); /设置为处长的工资 System.out.println(+编号:+t.getCode()+ 工资:+t.getSalary();,5技术分析,1) 类的继承 Java的类之间可以继承,通过类的继承,子类可以访问父类的所有成员变量和方法,就像是自己定义的变量和方法一样。 2) 访问控制符
15、访问控制符是一组限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符。类的访问控制符有public和default,default就是包内访问控制符。 域和方法的访问控制符有public、private、protected、private protected以及缺省访问控制符。 3) this和super Java中,this通常指当前对象,super则指父类的,6. 问题与思考,编写类Student,继承Human,除从类Human中继承属性code,name,birth和方法introdeuce(),setCode().getCode()外,Student中包含属性classnum
16、ber,它是int类型,表示所在班级号。Student还定义方法setClassnum()和getClassnum()分别实现对学生的编班和获知某学生所在班级。学生共分3个班,编班原则是: 如果学生编号除以3的余数是0,编入1班; 如果学生编号除以3的余数是1,编入2班; 如果学生编号除以3的余数是2,编入3班,4.5 教师编码的生成,知识要点 类的多态 final 实例 子类Teacher覆盖父类Human的方法setCode(),教师的编码除了序列号外,教师注册的年份也在其编码中,1详细设计 程序用到了包java.util.* 中的类Date和Calendar来获取系统的年份。 2编码实现
17、 1) 引入包 java.util.* 语句: import java.util.*; 分析:程序用到了包java.util.* 中的类Date和Calendar来获取系统的年份,所以需用import引入。 2) 定义方法setCode() 语句: void setCode() int icode; icode = Integer.parseInt(basecode) + 1; if (icode10) basecode = 00 + Integer.toString(icode); else if (icode100) basecode = 0 + Integer.toString(icod
18、e); else basecode = Integer.toString(icode); java.util.Date dtNow=new java.util.Date(); Calendar calendar = new GregorianCalendar(); calendar.setTime(dtNow); String year = String.valueOf(calendar.get(Calendar.YEAR); code = year+basecode; 分析:与Human类的setCode()方法不同,Teacher类中没有直接把basecode赋给code,而是加入了当年的
19、年份year 。 3源代码 略,4测试与运行,编写下面测试程序。 public class TeacherTest public static void main(String args) Teacher t = new Teacher(张国兵); t.setCode(); System.out.println( + t.code);,5技术分析,1) 类的多态 覆盖 如果子类中定义方法所用的名字、返回类型和参数表和父类中方法使用的完全一样,称子类方法覆盖了父类中的方法。 方法的重载 重载是指允许存在多个同名方法,而这些方法的参数表不同。 构造方法的重载 构造方法往往用来做一些初始
20、化工作,为实例变量赋予合适的初始值。不同条件下,对象可能会有不同的初始化行为。可通过重载构造方法来表达对象的多种初始化行为。 2) final final可以控制成员、方法或者是一个类是否可被覆写或继承等功能,6. 问题与思考,编写类Human的子类Student,自少有两个构造方法,一个构造方法参数只有姓名,另一个构造方法的参数有姓名和性别。Student覆盖Human的setCode()方法,在编码的时候,除了序列码外,前面包含入学年份(取自系统日期,4.6 Java中的抽象类与接口,4.6.1 抽象类计算几何形状的面积 知识要点 抽象方法与抽象类 实例 编写程序,分别实现类Shape和C
21、ircle,1详细设计 Shape中定义了的变量x,y。对圆来说,x代表半径;在对长方中,x,y分别代表长和宽;对三角而言,x,y分别代表底和高。 2编码实现 1) Shape的构造方法 语句: Shape (int a)x=a; Shape (int a,int b)x=a;y=b; 分析:圆只需一个参数半径决定,长方形和三角形需要更多参数决定,所以Shape为初始化某对象,需要不止一个构造方法。 2) 定义抽象方法area(); 语句: abstract double area(); 分析:包含有抽象方法的类称为抽象类,抽象方法的定义很简单,没有方法体。它需要子类来实现。 3) 返回面积; 语句: return 3.14*(x*x); 分析:在圆中x被定义成半径,所以3.14
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医药基础专题知识宣教
- 清明节缅怀先烈主题班会71
- 2023年薄板木船项目筹资方案
- 植物学题库及答案
- 《重症肺炎诊治》课件
- 养老院老人心理咨询师培训制度
- 养老院老人康复理疗师管理制度
- 定制目录Catalog教学课件
- 2024年版重庆地区离婚合同范本一
- 《青春期健康男性》课件
- 历史七年级上学期期末试卷含答案
- 【基于抖音短视频的营销策略分析文献综述2800字(论文)】
- 2021-2022学年度西城区五年级上册英语期末考试试题
- 《组织行为学》(本)形考任务1-4
- 广东省广州市白云区2022-2023学年九年级上学期期末语文试题
- 剧本-进入黑夜的漫长旅程
- DB43-T 958.3-2023 实验用小型猪 第3部分:配合饲料
- 化肥购销合同范本正规范本(通用版)
- 健康管理专业职业生涯规划书
- 外墙岩棉板施工方案
- 吊装葫芦施工方案
评论
0/150
提交评论