




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章Java的继承、多态、高级类特性和数组1. 2节介绍了部分Java语言的面向对象的基本特性Java语言程口设计5.1概述我们需要熟悉的常用基本类:Object类、Class类、String类Object类是Java类库所有类的根类。即,我们在Java程序中看到、用到的所有类都是 从Object类派生的,都是Object类的子类Java语言程序设计1. 1 Ob ject 类Object的两个常用方法:) toString。方法默认显示 类名对象的hash值);通常重写该方法,显示编程者想输出的信息) equals (Object obj)方法对于非字符串,用于判断两个对象是否相同, 即两
2、个变量是否指向同一个对象(在内存中的地 址是否相同);对于字符串,判断两个字符串是否相同通常用于在程序执行期间帮助加载新的类Java语言程疗设计5. 1. 3 String类Java语言没有表示字符串的基本数据类型,使用 String类代替。1. 3 String类.字符串的表示1)字符串常量的表示使用双引号”作分隔符,可用于初始化字 符串对象。例:String sl = Java”;String s2=6tstudent*?;Java对每一个字符串常量自动生成一个 String类实例,因此字符串常量可以直接调用 String类的方法。如:intlength = Are you student
3、?”.length。;Java语言程用设计5. 1. 3 String类2)用String类表示字符串可利用String类的构造方法生成空串例:String e = new String();可通过字符数组或字节数组生成字符串对象 (以后讨论)5. 1. 3 String类3.字符串的修改、连接和替换1)字符串连接String strl = abc” ;String str2 = strl.concat( cde);/str2= abccde”相当于 String str2= strl + “cde” ;2)替换子串String str3 = str2. replace (,33 ):/ st
4、r3 = ab3333de” ;String str3 = str2. replace( uccn ,33 ):/ str3 = ab33de”;5. 1. 3 String类3.字符串的修改、连接和替换3)提取子串String str2 = abccde;String s = str2. substring(1, 5);/ s= bccd” ;注意:字符串的字符顺序号是从0开始的,对于例子 中的str2,第0个字符是a,第5个字符是%,; substring。1,山)是从指定字符串的第n个字符开 始截取子串到第山个,其中不包括第m个Java语言程中设计5. 1. 3 String类4.字符串
5、比较s- equals (t);比较字符串S与t的内容是否相同。不能以S=t比较!如果某个子基盘靠瀛类中的某个方 法有相同的名称、返回类型和参数,但功能不同(方法的具体实现不同),则称这个方法覆盖了它的父类方法。方法覆盖条件:成员名称相同;参数个数、类型、顺序相同;返回值类型相同;静态方法只能覆盖为静态方法;访问属性的要求:覆盖的方法必须提供与被覆盖方法一样的访问 权限。例一个简单的方法覆盖的例子 class A voidf() System.out初利n(”调用 A.f()”);Jvoid h() System.out.printin(调用 A.h()M);class B extends v
6、oidf( System.out.printin(调用 B.f()M);子类成员将父类 中同名的非私有 成员覆盖(屏蔽)了。可在子类的方法中使用super.f()调用父类的方法,不带super使用子类的父类中的访问属性子类中的覆盖方法访问属性publicpublicprotectedpubli c 或 p rotected默认不能是privateJava语言程序设计例一个简单的方法覆盖的例子public class Example public static void main(String args) A.a = new A();B.b = new B();a.f();a.h();b.f()
7、;Java语言程咛设计方法的重载翻妻嘉麟个名称相同、但 参数不同的方法。Java虚拟机能根据传递给方法的参数,自动选择合适的重载方法。重载的简单例子public class testpublic static void main(String args) System.out.println(max(4,3);System.out.println(max(5,7,2);)static int max (int a , int b ) return a b ? a : b ; 两个同名的方法,但是参数个数不同ostatic int max (int a , int b, int c ) int
8、t;t = max ( a , b ); return max (t, c );)Java语言程序设计5.4高级类特性声明一个类的变量或方法为Static时, 意味着该变量或方法是类变量或类方法,与 任何对象无关。Java语言程中设计5. 4. 1 static关键字static修饰的变量是仅属于类的静态域。静态域是类中每个对象共享的域。它们 是类的域,不属于任何一个类的具体对象。 是一个公共的存储单元,任何一个类的对象访问它时,取到的都是相同的数值,同样任何一个类的对象去修改它时,也都是在对同一个内存单元做操作。static修饰的方法称为静态方法:CD static的方法是属于整个类的,它在
9、内存中的代码段将随着类的定义而分配和装载,不被任何一个对象专有;(2)由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量(即不能访问实例变量),而只能处理属于整个类的成员变量。Java语言程序设计端去1 static关键字瓦特数class Light int wattage;boolean indicator; 开关String location; 位置/static 变量static int counter; 创建灯管对象编号Light() 默认构造方法wattage = 50;indicator = true;location = X;+counter; 计数器
10、增量“static 方法public static void writeCount()System.out.println(,fNumber of lights:0 + counter);/ System.outprintln(uNumber of lights: counter);此行编译错误5. 4. 1 static关键字例5.8 cont.public class Warehousepublic static void main(StringO args)Light.writeCount();用类名调用Light aLight = new Light(); 创建一个对象System.o
11、ut.printlnfValue of counter/1 + Light.counter);通过类名访问Light bLight = new Light。; 仓U建另一个对象 bLight.writeCount();利后引用调用Light cLight = new Light。; 再仓ij建一个对象System.out. printing Value of counter: + cLight.counter);转行处里通过引用访问iis仃结果:)Number of lights:0Value of counter;1Number of lights:2 Value of counter:3.
12、Java语言程序设计5. 4. 2 final关键字最终类如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final。被定义成final的类,通常是一些有特殊作用的、用来完成标准功能的类,将一个类定义为final则可以将它的内容、属性和功能固定下来,与它的类名形成稳定的映射关系,从 而保证引用这个类时所实现的功能是准确无误的。5. 4. 2 final关键字 最终域final修饰的域称为最终域,实际上就是Java中的常量。使用时应注意:(1)需要说明常量的数据类型;(2)需要同时指出常量的具体取值;(3)因为
13、类的所有对象的常量成员,其数值都固定一致,为节省空间,常量通常声明为static。Java语言程疗设计5. 4. 2 final关键字最终方法用final修饰符修饰的方法,其功能和内部语句不能再更改, 不能再被继承。所有被private修饰符限定为私有的方法以及所有包含在 final类中的方法,都默认为是final的。客观世界里,许多概念是抽象对象,这种概念的类没有 实例。例如:车是抽象类,没有具体事物可对应。客观世界 只有汽车,火车,自行车等。Java中,不能实例化的类称为抽象类。抽象类必须被继承,其方法必须被重写。抽象类的声明:abstract class抽象类名)抽象类中可以声明方法,称
14、为抽象方法。抽象方法只 需声明,无需实现;抽象类不能被实例化,抽象类不一定要 包含抽象方法。若类中包含了抽象方法,则该类必须被定义 为抽象类。Java语言程序设计5. 4. 4抽象类例 5. 10 AbstractClassTest. java abstract class Person /抽象类的声明,不能实例化 public Person(String n) name = n;public abstract String getDescriptionO;没有方法体的抽象方法,即只说明了这个方法的存在,由子类来实现public String getNameO /所有子类的通用方法,获取“人”
15、的姓名 return name;)private String name; /任何“人”都具有的属性:姓名例 5. 10 cont. AbstractClassTest. javaclass Employee extends Person/继承抽象类Person, Employee具有Person的所有属性和方法 public Employee (String n, double s, int year, int month, int day) super (n); /调用父类的构造方法 salary = s; /Emplyee特有的工资属性,因此不能在父类中声明 )public String
16、 getDescriptionO /实现父类声明过的抽象方法 return String format (公司雇员,年薪是%. 2f” , salary);)Java语言程序设计5. 4. 4抽象类例 5. 10 cont. AbstractClassTest. javaclass Student extends Person 继承抽象类Personpublic Student (String n, String m) super (n); /调用父类的构造方法major = m; /Student特有的专业属性,因此不能在父类中声明 )public String getDescription
17、O /实现父类声明过的抽象方法 return String “大学生,专业是“ + major + “0 ”;)private String major;例 5. 10 cont. AbstractClassTest. javapublic class AbstractClassTest public static void main (String args) Person people = new Person2/Person的类型是 peoplepeople0 = new Employee (, 50000, 1989,10, 1);创建Employee对豪,赋值给people0,为什么
18、不是people的对象? peopletl = new Student(“李明”,“计算机科学”);/前建Employee对象,赋值给peoplefor ( Person p: people)System. out. printin (p. getName () + + p. getDescription();)运行结果:张浩,公司雇员,年薪是 50000. 0(h李明,大学生,专业是计算机科学。Java语言程存设计5. 4.5 接口接口的目的:实现多继承并简化其复杂性。主要功能:1)不管类的层次,不同的类可以有相同的接口。 接口只声明方法,但不实现方法。2) 一个类可实现许多接口,但只有一个
19、父类3)接口可以了解对象的交互界面(方法),无 需了解对象所对应的类。5. 4.5 接口什么东西会飞?父类:动物父类:交通工具接口:会飞翔子类:小鸟 子类:飞机Java语言程序设计5. 4.5 接口1声明接口接口修饰符interface接口名extends父类名 方法原型声明或常量。常量定义格式为:type NAME=value;该常量被实现该接口的多个类共享;具有public,final, static的属性。:方法体定义格式为:(具有public和abstract属性)returnType methodName(paramlist);5. 4.5 接口1声明接口例:public inter
20、face StockWatcher 接 口声明final String sunTicker = MSUNWM;final String oracleTicer = ORCL; 常量声明final String ciscoTicer = CSC。”;void value Changed(String tickerSymbol,double new Value); 方法声明Java语言程存设计5. 4.5 接口2实现接口接口只有抽象方法,不能实例化,要使用接口,必须定义类。语法:public class类名 implements接口名数据接口方法)股票接口实现代码:public class Sto
21、ckApplet extends Applet implements StockWatcher public void valueChanged(String tickerSymbol, double new Value) if (tickerSymbol.equals(sunTicker) .else if (tickerSymbol.equals(oracleTicker).包含了方法的else if (tickerSymbol.equals(ciscoTicker) .) 具体实现3接口作为类型的使用public class StockMonitorpublic void watchSt
22、ock(StockWatcherwatcher5String tickerSymbol,double delta)Java语言程存设计5. 4.5 接口3接口作为类型的使用public class StockMonitorpublic void watchStock(StockWatcherwatcher,StringtickerSymbol,double delta). 接口名作名参数的类型 意味着:我们不关心对象所对应的类,只关心它是否具有接口所声明的方法例:interface CanFight void fight。;interface CanSwim void swim();inter
23、face CanFly void fly();class ActionCharacter public void fight() )class Hero extends Actioncharacter implements CanFight,CanSwim, CanFlypublic void swim()public void fly()Java语菖程中设计5. 4.5 接口例:interface CanFight void fight。;interface CanSwim void swim();interface CanFly void fly();class ActionCharact
24、erpublic void fight() )继承一个父类class Hero extends Actioncharacter implementsCanFight,CanSwim, CanFlypublic void swim()public void fly()例:interfaceCanFight void fight。;interface CanSwim void swim();interface CanFly void fly();class ActionCharacterpublic void fight() 继承一个父类实现3个接口class Hero extends Actio
25、ncharacter implementsCanFight,CanSwim, CanFlypublic void swim()public void fly()Java语言程#设计5. 4.5 接口例:interfaceCanFight void fight。;interface CanSwim void swim();interface CanFly void fly();class ActionCharacterpublic void fight() 继承一个父类实现3个接口class Hero extends Actioncharacter implementsCanFight,CanS
26、wim, CanFlypublic void swim() 继承了父类中的方法fight(),因此只需 public void fly() 实现3个接 口中的2个方法swim。和fly()public class Adventurepublic static void t(CanFight x)x.fight();public static void u(CanSwim x)x.swim();public static void v(CanFly x)x.fly();public static void w(ActionCharacter x)x.fight();public static v
27、oid main(String args)Hero h = new Hero();t(h); 把 h 视为 CanFight 接口u(h); 把 h 视为 CanSwim 接 口v(h); 把 h 视为 CanFly 接 口w(h); 把h视为ActionCharactor接口 !Java语言程序设计5. 4.5 接口public class Adventure 几个方法的参数类型不同public static void t(CanFight x)x.fight();public static void u(CanSwim x)x.swim();public static void v(Can
28、Fly x)x.fly();public static void w(ActionCharacter x)x.fight();public static void main(String args)Hero h = new Hero();t(h); 把 h 视为 CanFight 接口u(h); 把 h 视为 CanSwim 接 口v(h); 把 h 视为 CanFly 接 口w(h); 把h视为ActionCharactor接口 !Java语言程序设计public class Adventure /几个方法的参数类型不同 public static void t(CanFight x)x.fight(); public static void u(CanSwim x)x,swim();public static void v(CanFly x)x.fly();public static void w(ActionCharacter x)x.fight(); public static void main(String args)Hero h = new Hero();t(h); 把 h 视为 CanFight 接口u(h); 把 h 视为 CanSwim 接 口v(h); 把 h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第一部分全科医学基础
- 2025年黑龙江省安全员A证考试题库
- 2025年-河南省建筑安全员《C证》考试题库
- 河北省保定市唐县第一中学2024-2025学年高二下学期4月期中考试化学试题(含答案)
- 2025年吉林建筑安全员B证考试题库附答案
- 2025年山东建筑安全员B证考试题库及答案
- 2025年山东建筑安全员A证考试题库附答案
- 河南省信阳市2024-2025学年高三上学期第二次教学质量检测政治试题 含解析
- 江西省赣州市于都县2023-2024学年八年级下学期物理期中试题(含答案)
- 2025家居采购合同模板
- 烘焙食品市场细分-深度研究
- 武汉市2025届高中毕业生二月调模拟卷答案
- 2025-2030全球奶牛用挤奶机器人行业调研及趋势分析报告
- 心理健康教育与校园文化建设融合探讨
- 无人机操控知识培训课件
- 装卸作业安全知识培训课件x
- 2025年度婚姻介绍所婚恋公益项目合作合同
- 环境健康与安全EHS管理制度
- 2025广东省广州打捞局编外人员招聘21名高频重点提升(共500题)附带答案详解
- 公安机关保密培训
- 产科护理临床案例分享
评论
0/150
提交评论