Java面向对象高级特性.ppt_第1页
Java面向对象高级特性.ppt_第2页
Java面向对象高级特性.ppt_第3页
Java面向对象高级特性.ppt_第4页
Java面向对象高级特性.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2020/8/7,1,第四章,Java面向对象高级特性,2020/8/7,2,本章要点,Static 、final关键字 抽象类 接口 包 内部类 访问控制 其它,2020/8/7,3,4.1 static关键字,用static(静态的)修饰的变量或方法又称为类变量和类方法。 类变量(静态变量) 在成员变量声明时使用static关键字。 注意点: 类变量只在系统加载其所在类时分配空间并 初始化,实例化对象时不再分配空间,所有 实例对象将共享类的静态变量。 用途 可以用来在实例对象之间进行通信,复习 变量:描述对象的属性 成员变量:类的变量定义部分所定义的变量,2020/8/7,6,类似于其他语

2、言中的全局变量,可以用类 名直接调用。 如: Count.counter 例1 double d = Math.PI;,类名,Static变量,2020/8/7,7,注意点(见Hello.static.java) 静态方法只能访问方法体内定义的局部变量、自己的参数和静态变量。(因静态方法不是通过调用对象实例,故在静态方法中没有this指针) 子类不重写(覆盖)父类的静态方法,而是隐藏 不能将非静态方法重写为静态的方法,反之亦然。 main() 是一个静态方法,是程序的入口点,可以使JVM不创建实例对象就可以运行方法。,2020/8/7,8,静态初始化程序 类中不属于任何方法体中,并以stati

3、c关键字修饰的语句块。 如: static I=5; System.out.println(“Static code:I=”+I+) ; 注意 静态语句块只在加载类时执行一次,通常用来 进行类成员变量的初始化。,2020/8/7,9,4.2 final关键字,在Java中,可以用final关键字声明类、成员 方法、成员变量。 被定义成final的类不能再派生子类如: Java.lang.String为一个final类。 被定义为final的方法不能重写,优点是在运行时进行效率优化。(举例) 被定义为final的变量只能被赋值一次,常 用来定义常量,变量名一般大写。,2020/8/7,10,4.

4、3 abstract关键字,abstract方法 只有定义而没有方法体的方法。 abstract类 包含一个或多个抽象方法的类。 定义抽象类的格式为: abstract class 抽象类名 注意点 抽象类不能实例化。可派生子类,在子类中 具体定义方法的功能。 抽象类可以没有抽象方法,这样是为了禁止创建实例,2020/8/7,11,目的是为一类对象建立抽象的模型,在同类对象所对应的体系中抽象类往往位距顶层。 使类的设计变的清晰、支持多态、为类的体 系提供通用的接口。,2020/8/7,12,Employee e=new Manager(); /正确 Employee e=new Employe

5、e(); /错误,abstract class Employee abstract void raiseSallory(int i);/没有,直接以分号结尾 Class Manager extends Employee /若子类没有实现抽象方法, void raiseSallory(int i); /那么子类也必须是抽象的 ,接口用关键字interface来定义的 Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能) 接口是客户端代码与提供服务的类之间的“规约”。 接口是

6、抽象类的变体。 接口中的所有方法都是抽象的,没有一个有程序体。,4.4 接口,2020/8/7,14,接口定义格式: publicabstractinterface 接口名extends 父接口1,父接口2, public static final 常量定义 ; public abstract 方法定义; 接口的成员变量默认具有final属性,即常量。 接口的方法为abstract,仅有声明,没有实现。,2020/8/7,15,接口的实现与使用 implements 关键字用来表示某类实现某个接口, 在类体中可以使用接口中定义的常量,且须 实现接口中定义的所有方法。 一个类可以实现多个接口,在

7、implements中 用“,” 分隔。例如:,Public interface Flyer public void takeoff(); public void land(); public void fly(); ,2020/8/7,16,Public class Airplane implements Flyer public void takeoff ( ) / 实现起飞的操作 public void land ( ) /下落 public void fly( ) /起飞 ,2020/8/7,17,接口的多态 接口的引用比类更灵活。 一个接口的引用,可以指向任意不相关的、实现了这个接口

8、的类对象。 对比:继承中,父类的引用只能指向它的子类对象。 example:Herface.java 注意:接口的引用,只能调用该类实现这个接口的方法,而不能调用这个类对象自身的成员方法。,什么时候使用接口 (1)多重继承 (2)声明方法,期望一个或更多的类来实现该方法。 (3)揭示一个对象的编程接口,而不揭示类的实际程序体。 (4)捕获无关类之间的相似性,而不强迫类关系。 (5)描述“似函数”对象,它可以作为参数被传递到在其它对象上调用的方法中。,2020/8/7,19,多重继承,Java中规定一个类只能继承一个父类,但可以实现多个接口, Java是利用接口实现多重继承的。,

9、父类方法 interface_1 interface2 interface_n,抽象或具体父类,Interface_1,Interface_2,Interface_n,子类,2020/8/7,20,接口的扩展(通过继承),通过创建接口的子接口来增加新的方法。 如:,Interface Shape void draw(); void erase(); interface ShapeArea extends Shape double area(); ,2020/8/7,21,接口与抽象类,两者有一定的相似,又有区别 接口中方法都是抽象的,而抽象类中可以定义带有方法体的不同方法 一个类可以实现多个接

10、口,而只可继承一个抽象父类 接口不是类体系的一部分,即与实现它的类不构成继承体系。抽象类通常位于类体系顶层。 接口可用于多重继承。,2020/8/7,22,4.5 包,包的概念 Java中包是相关类与接口的一个集合,它提供了命名空间的管理和访问。包具有特定的访问控制权限。 Java中编译器把包对应于文件系统的目录和文件管理,还可以使用压缩文件的格式存储(zip或jar)。 一个包就是一个文件夹! 包还可以包含子包/子目录。,2020/8/7,23,JDK中提供的包有 Java.applet Java.awt, Java.event等。 例如:名为 Java.applet的包中,所有类文件都存储

11、在目录 classpathjavaapplet 下,这里classpath由环境变量来设定。,2020/8/7,24,包机制的优点,易根据包中类的功能找到所需要的类,包中的类是相关的。 每个包都是命名空间,不同包中类的名字不冲突。 同一个包中的类之间有比较宽松的访问机制。 包的定义与使用 定义用关键字 package 如:package graphics; 说明: .package语句指定某类加入graphics包,并存放路径 为 classpathgraphics,2020/8/7,25,.如原文件中没有package语句,则指定为无名包,通常放在源文件的目录下。 .package只能有一条

12、,并在源程序的第一行。 .一个类只能属于一个包 .包名以“.”为分隔符,2020/8/7,26,使用包成员,import 语句放在源程序的前面 如:import graphics .circle /引入包中的Circle类 import graphics.* /引入包中所有的类 如果没有用import语句引入包的类,则可用长名 引用 格式: 包名.类名 如:graphics.circle mycircle=new graphics.circle() 通常没有必要这样做。一般只有在两个包有同名类时,使用长名引用方式。,2020/8/7,27,4.6 访问权限控制,Java中有四中不同的访问权限

13、private-私有的 protected-受保护的 public - 公开的 缺省(default) (1)类成员的访问控制,2020/8/7,28,(2)类的访问控制,4.7 内 部 类,定义在类中的类,称为内部类,也称为嵌套类。 内部类本身是一个类,但它同时又是外部类的一个成员。 内部类根据放置的位置和修饰符又可细分为: -成员内部类 -局部内部类 -静态内部类 -匿名内部类。 内部类的主要优点之一:内部类的实例与外部类的实例共享一种“特殊关系”内部类中的代码可以访问外部类的所有成员(甚至是那些标识为private的成员),Java程序设计与应用开发(第2版),30,成员内部类作为外部类

14、的一个成员存在,与外部类的属性、方法并列,public class Group2 private int count; public class Student String name; public Student(String n1) name = n1; count+; public void output() System.out.print( + ); public void output() Student s1 = new Student(李明); s1.output(); System.out.println( count = +this.count); pu

15、blic static void main (String args) Group2 g2 = new Group2( ); g2.output(); Group2.Student s = new Group2.Student(李四); s.output(); ,声明成员内部类,访问其外部类的成员变量,内部类的成员:name,output() 不能为static,编译出错,因在静态方法main中,不能访问非静态成员类Student的构造方法,创建内部类对象, 并通过内部类对象访问内部类成员,外部类方法,可以与内部类方法同名,问题:该语句能否 正确执行,31,局部内部类在方法中定义的内部类。只能

16、访问方法中常量,和外部内所有成员。,Public class Outer private int out_i = 1; public void f(final int k) final int j = 10; class Inner Inner(int k) System.out.println(out_i); System.out.println(j); new Inner(k); public static void main(String args) Outer out = new Outer(); out.f(3); ,定义在方法内部,可以直接访问外部类的实例变量,可以访问外部类的局部

17、变量(即方法内的变量),但是变量必须是final的,访问局部内部类须先有外部类对象,32,静态内部类,class Outerstatic class Inner 静态内部类可以直接生成,而不需要通过外部类对象生成。 Outer.Inner i = new Outer.Inner(); 静态内部类只能访问外部类的静态成员。 只有静态内部类才可以声明静态成员; 内部类被声明为静态后,无法正常访问外部类非静态成员,受到很大的限制。只能通过new一个外部类对象来访问。,33,使用静态内部类的原因,需要在内部类定义静态成员; 希望隐藏内部类; 避免类名重复 在开发大型应用程序时需要设计大量的类,类存在重

18、名的可能 为了避免这种情况,可以把可能重名的类设置为static、public的内部类 其他类在引用时要使用完成的内部类名标识(外部类名.内部类明),这样就避免了类名重复。,34,public class Group6 public static class Student static int count; String name; int number; public Student(String n1) name = n1; count+; number = count; public void output() System.out.println( + number

19、=+this.number); public static void main (String args) Group6.Student s1 = new Group6.Student(A); s1.output(); Group6.Student s2 = new Group6.Student(B); s2.output(); ,定义静态公用内部类,静态内部类中的静态变量,纪录创建对象的序号,静态内部类的构造方法,创建一个对象序号自动增加,在静态main方法中,通过完整的内部类标示符创建内部类对象,35,在静态main方法中,通过完整的内部类标示符Group6.Student创建内部类对象,并使用静态成员变量记录创建对象的序号,36,匿名内部类其实为一个局部内部类,在类很小时使用(4行代码以下),/ A method that returns an anonymous inner class. public class Parcel6 public Contents cont() Contents con = new

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论