




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020/5/29,1,第四章,Java面向对象高级特性,2020/5/29,2,本章要点,Static、final关键字抽象类接口包内部类访问控制其它,2020/5/29,3,4.1static关键字,用static(静态的)修饰的变量或方法又称为类变量和类方法。类变量(静态变量)在成员变量声明时使用static关键字。注意点:类变量只在系统加载其所在类时分配空间并初始化,实例化对象时不再分配空间,所有实例对象将共享类的静态变量。用途可以用来在实例对象之间进行通信,复习变量:描述对象的属性成员变量:类的变量定义部分所定义的变量,2020/5/29,6,类似于其他语言中的全局变量,可以用类名直接调用。如:Count.counter例1doubled=Math.PI;,类名,Static变量,2020/5/29,7,注意点(见Hello.static.java)静态方法只能访问方法体内定义的局部变量、自己的参数和静态变量。(因静态方法不是通过调用对象实例,故在静态方法中没有this指针)子类不重写(覆盖)父类的静态方法,而是隐藏不能将非静态方法重写为静态的方法,反之亦然。main()是一个静态方法,是程序的入口点,可以使JVM不创建实例对象就可以运行方法。,2020/5/29,8,静态初始化程序类中不属于任何方法体中,并以static关键字修饰的语句块。如:staticI=5;System.out.println(“Staticcode:I=”+I+);注意静态语句块只在加载类时执行一次,通常用来进行类成员变量的初始化。,2020/5/29,9,4.2final关键字,在Java中,可以用final关键字声明类、成员方法、成员变量。被定义成final的类不能再派生子类如:Java.lang.String为一个final类。被定义为final的方法不能重写,优点是在运行时进行效率优化。(举例)被定义为final的变量只能被赋值一次,常用来定义常量,变量名一般大写。,2020/5/29,10,4.3abstract关键字,abstract方法只有定义而没有方法体的方法。abstract类包含一个或多个抽象方法的类。定义抽象类的格式为:abstractclass抽象类名注意点抽象类不能实例化。可派生子类,在子类中具体定义方法的功能。抽象类可以没有抽象方法,这样是为了禁止创建实例,2020/5/29,11,目的是为一类对象建立抽象的模型,在同类对象所对应的体系中抽象类往往位距顶层。使类的设计变的清晰、支持多态、为类的体系提供通用的接口。,2020/5/29,12,Employeee=newManager();/正确Employeee=newEmployee();/错误,abstractclassEmployeeabstractvoidraiseSallory(inti);/没有,直接以分号结尾ClassManagerextendsEmployee/若子类没有实现抽象方法,voidraiseSallory(inti);/那么子类也必须是抽象的,接口用关键字interface来定义的Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)接口是客户端代码与提供服务的类之间的“规约”。接口是抽象类的变体。接口中的所有方法都是抽象的,没有一个有程序体。,4.4接口,2020/5/29,14,接口定义格式:publicabstractinterface接口名extends父接口1,父接口2,publicstaticfinal常量定义;publicabstract方法定义;接口的成员变量默认具有final属性,即常量。接口的方法为abstract,仅有声明,没有实现。,2020/5/29,15,接口的实现与使用implements关键字用来表示某类实现某个接口,在类体中可以使用接口中定义的常量,且须实现接口中定义的所有方法。一个类可以实现多个接口,在implements中用“,”分隔。例如:,PublicinterfaceFlyerpublicvoidtakeoff();publicvoidland();publicvoidfly();,2020/5/29,16,PublicclassAirplaneimplementsFlyerpublicvoidtakeoff()/实现起飞的操作publicvoidland()/下落publicvoidfly()/起飞,2020/5/29,17,接口的多态接口的引用比类更灵活。一个接口的引用,可以指向任意不相关的、实现了这个接口的类对象。对比:继承中,父类的引用只能指向它的子类对象。example:Herface.java注意:接口的引用,只能调用该类实现这个接口的方法,而不能调用这个类对象自身的成员方法。,什么时候使用接口(1)多重继承(2)声明方法,期望一个或更多的类来实现该方法。(3)揭示一个对象的编程接口,而不揭示类的实际程序体。(4)捕获无关类之间的相似性,而不强迫类关系。(5)描述“似函数”对象,它可以作为参数被传递到在其它对象上调用的方法中。,2020/5/29,19,多重继承,Java中规定一个类只能继承一个父类,但可以实现多个接口,Java是利用接口实现多重继承的。,父类方法interface_1interface2interface_n,抽象或具体父类,Interface_1,Interface_2,Interface_n,子类,2020/5/29,20,接口的扩展(通过继承),通过创建接口的子接口来增加新的方法。如:,InterfaceShapevoiddraw();voiderase();interfaceShapeAreaextendsShapedoublearea();,2020/5/29,21,接口与抽象类,两者有一定的相似,又有区别接口中方法都是抽象的,而抽象类中可以定义带有方法体的不同方法一个类可以实现多个接口,而只可继承一个抽象父类接口不是类体系的一部分,即与实现它的类不构成继承体系。抽象类通常位于类体系顶层。接口可用于多重继承。,2020/5/29,22,4.5包,包的概念Java中包是相关类与接口的一个集合,它提供了命名空间的管理和访问。包具有特定的访问控制权限。Java中编译器把包对应于文件系统的目录和文件管理,还可以使用压缩文件的格式存储(zip或jar)。一个包就是一个文件夹!包还可以包含子包/子目录。,2020/5/29,23,JDK中提供的包有Java.appletJava.awt,Java.event等。例如:名为Java.applet的包中,所有类文件都存储在目录classpathjavaapplet下,这里classpath由环境变量来设定。,2020/5/29,24,包机制的优点,易根据包中类的功能找到所需要的类,包中的类是相关的。每个包都是命名空间,不同包中类的名字不冲突。同一个包中的类之间有比较宽松的访问机制。包的定义与使用定义用关键字package如:packagegraphics;说明:.package语句指定某类加入graphics包,并存放路径为classpathgraphics,2020/5/29,25,.如原文件中没有package语句,则指定为无名包,通常放在源文件的目录下。.package只能有一条,并在源程序的第一行。.一个类只能属于一个包.包名以“.”为分隔符,2020/5/29,26,使用包成员,import语句放在源程序的前面如:importgraphics.circle/引入包中的Circle类importgraphics.*/引入包中所有的类如果没有用import语句引入包的类,则可用长名引用格式:包名.类名如:graphics.circlemycircle=newgraphics.circle()通常没有必要这样做。一般只有在两个包有同名类时,使用长名引用方式。,2020/5/29,27,4.6访问权限控制,Java中有四中不同的访问权限private-私有的protected-受保护的public-公开的缺省(default)(1)类成员的访问控制,2020/5/29,28,(2)类的访问控制,4.7内部类,定义在类中的类,称为内部类,也称为嵌套类。内部类本身是一个类,但它同时又是外部类的一个成员。内部类根据放置的位置和修饰符又可细分为:-成员内部类-局部内部类-静态内部类-匿名内部类。内部类的主要优点之一:内部类的实例与外部类的实例共享一种“特殊关系”内部类中的代码可以访问外部类的所有成员(甚至是那些标识为private的成员),Java程序设计与应用开发(第2版),30,成员内部类作为外部类的一个成员存在,与外部类的属性、方法并列,publicclassGroup2privateintcount;publicclassStudentStringname;publicStudent(Stringn1)name=n1;count+;publicvoidoutput()System.out.print(+);publicvoidoutput()Students1=newStudent(李明);s1.output();System.out.println(count=+this.count);publicstaticvoidmain(Stringargs)Group2g2=newGroup2();g2.output();Group2.Students=newGroup2.Student(李四);s.output();,声明成员内部类,访问其外部类的成员变量,内部类的成员:name,output()不能为static,编译出错,因在静态方法main中,不能访问非静态成员类Student的构造方法,创建内部类对象,并通过内部类对象访问内部类成员,外部类方法,可以与内部类方法同名,问题:该语句能否正确执行,31,局部内部类在方法中定义的内部类。只能访问方法中常量,和外部内所有成员。,PublicclassOuterprivateintout_i=1;publicvoidf(finalintk)finalintj=10;classInnerInner(intk)System.out.println(out_i);System.out.println(j);newInner(k);publicstaticvoidmain(Stringargs)Outerout=newOuter();out.f(3);,定义在方法内部,可以直接访问外部类的实例变量,可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的,访问局部内部类须先有外部类对象,32,静态内部类,classOuterstaticclassInner静态内部类可以直接生成,而不需要通过外部类对象生成。Outer.Inneri=newOuter.Inner();静态内部类只能访问外部类的静态成员。只有静态内部类才可以声明静态成员;内部类被声明为静态后,无法正常访问外部类非静态成员,受到很大的限制。只能通过new一个外部类对象来访问。,33,使用静态内部类的原因,需要在内部类定义静态成员;希望隐藏内部类;避免类名重复在开发大型应用程序时需要设计大量的类,类存在重名的可能为了避免这种情况,可以把可能重名的类设置为static、public的内部类其他类在引用时要使用完成的内部类名标识(外部类名.内部类明),这样就避免了类名重复。,34,publicclassGroup6publicstaticclassStudentstaticintcount;Stringname;intnumber;publicStudent(Stringn1)name=n1;count+;number=count;publicvoidoutput()System.out.println(+number=+this.number);publicstaticvoidmain(Stringargs)Group6.Students1=newGroup6.Student(A);s1.output();Group6.Students2=newGroup6.Student(B);s2.output();,定义静态公用内部类,静态内部类中的静态变量,纪录创建对象的序号,静态内部类的构造方法,创建一个对象序号自动增加,在静态main方法中,通过完整的内部类标示符创建内部类对象,35,在静态main方法中,通过完整的内部类标示符Group6.Student创建内部类对象,并使用静态成员变量记录创建对象的序号,36,匿名内部类其实为一个局部内部类,在类很小时使用(4行代码以下),/Amethodthatreturnsananonymousinnerclass.publicclassParcel6publicContentscont()Conten
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 桥梁结构安全评估与加固方案
- 城区供水特许经营权项目施工方案
- 桥梁检修与养护管理方案
- 方便面包装工艺创新与环保设计方案
- 水厂扩建工程施工方案
- 人防工程施工技术难点攻关
- 综合客运枢纽项目建设工程方案
- 校长在中层班子会上发言:六个“干”字破题 推动学校工作提质增效
- 金融投资分析业务试题及答案
- 全国职业院校技能大赛培训试题及答案
- 保险基础知识培训
- 口腔药品急救知识培训课件
- 2025年教育系统学校中层后备干部选拔考试题(含答案)
- 养老院安全培训考试题及答案解析
- DB32-T 5192-2025 工业园区碳排放核算指南
- 湖南省九校联盟2026届高三上学期9月第一次联考日语试题(含答案)
- 时事政治讲座课件
- 四次侵华战争课件
- 2025年成人高考试题及答案
- 2025年上海市公安辅警、法检系统辅助文员招聘考试(职业能力倾向测验)历年参考题库含答案详解
- XX园项目销售手册
评论
0/150
提交评论