四、包、内部类、匿名类、抽象类、接口.ppt_第1页
四、包、内部类、匿名类、抽象类、接口.ppt_第2页
四、包、内部类、匿名类、抽象类、接口.ppt_第3页
四、包、内部类、匿名类、抽象类、接口.ppt_第4页
四、包、内部类、匿名类、抽象类、接口.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、包、抽象类、接口、 内部类、匿名类,包(package),包是若干类的集合,用于实现命名空间的管理。 包不是一个文件。 在实际代码的存放形式中,包表现为一个具体的文件夹或是诸如jar压缩文件这样的实体,而类则是文件夹下或压缩文件中的某个文件.class。 为什么使用文件夹形式? 便于程序库的管理 便于创建唯一的名字空间 有利于类的查找,定义包:package,在Java代码中使用package语句来声明这个代码所处的包结构。 每个类在编译的时候被指定属于某一特定的包,用关键字package说明。 如果package未指定,则所有的类被组合到一个未命名的缺省包中 package语句必须是文件中第

2、一行非注释程序代码,packge packagename.subname; public class ,javac d 选项,包名中的“.”号代表了目录分割符,例如 javac d path 将生成的.class文件放在指定的目录结构中 如果程序中没有package语句,或者有package语句但是编译时不用-d选项,则生成的.class文件放入当前目录。,package std.math; public class ComplexNumber / code area ,包引入:import,用import来引入包或包里的成员。 使用import对性能没有影响,只是简单地为类设定有效性或路径,

3、并不是直接将代码引入程序中。 当在一个类中使用处在不同包下,但类名相同的类时,必须使用显式形式。 import语句必须出现在所有类定义之前。 java.lang包为缺省包,自动被import。,import java.util.*; import java.util.ArrayList;,java.util.Vector v = new java.util.Vector();,环境变量CLASSPATH,CLASSPATH环境变量:包含一个或多个目录,用作查找.class文件的根目录。 .jar文件:使用jar打包命令生成的文件。使用jar文件时,必须在路径中写上.jar文件的全称 查看当前的

4、CLASSPATH设置 即时改变当前CLASSPATH,C:echo %CLASSPATH%,C:set CLASSPATH=c:lib,Java解释器加载类过程,1、将环境变量CLASSPATH包含的一个或多个目录作为起始目录 2、解释器取出包名,将小数点换成斜杠,产生以CLASSPATH目录为起点的查找路径 如:”import p1.p2.*”转换为”p1p2*.class”或”p1/p2/*.class”,斜杠的正反取决于操作系统 3、查找目录下的.class文件,编译单元,每个编译单元必须是以.java为后缀的文件名称,在一个编译单元里,可以有一个public类,这个类的名字必须与文件

5、名相同,在一个单元里,只能有一个public类。 当编译一个.java文件时,在.java文件中的每个类都会有一个输出文件,而该输出文件的名称与.java文件中每个类的名称都相同,只是多了一个.class后缀名。,包访问权限,在类中,没有任何权限修饰符的成员变量和方法具有包访问权限 当前包中其他类都可访问这些成员和方法,class Counter int i; Counter() i = 1; void f() System.out.println(i); public class TestP public static void main(String args) Counter c = n

6、ew Counter(); c.i = 3; c.f(); ,类的访问权限,包访问权限 public 类不能使用private和protected修饰符,抽象类,抽象类是没有具体对象的概念类,用abstract来修饰。 抽象类实际上是所有子类的公共域和公共方法的集合,而每一个子类则是父类的特殊化,是对公共域和方法在功能、内涵方面的扩展和延伸。 抽象类的目的是为它的所有导出类创建一个通用接口。 若一个类是抽象类,则此类不能被实例化,abstract class abstractClass int a; abstract void f(); void g(int i) ,抽象方法,抽象方法指没有方

7、法体的方法,它为该类的子类定义了一个方法的接口标准。 抽象类经常要包含某些抽象方法,抽象方法的具体实现要在子类中实现。 抽象类不能被实例化,继承抽象类的子类如果要实例化,则必须重写所有抽象方法,否则该子类也是一个抽象类 抽象类不一定要包含抽象方法 若类中包含了抽象方法,则该类必须定义为抽象类 构造器不能用abstract修饰 Shapes2.java,接口,Java 语言规范中定义了一种被称为“接口”(interface)的技术,来指明一个类必须具有什么功能,但不需要明确如何做。 接口的定义方式,与类定义相似,但接口中只包含常量和方法的定义,没有变量和方法的实现。 interface和impl

8、ements关键字,interface InterfaceName /. class ClassName implements InterfaceName /. ,接口中的常量和方法,常量定义 该常量被实现该接口的多个类共享 缺省的具有public、final、static的属性,必须提供初始化值。 方法定义 缺省具有public和abstract属性,接口的使用,接口不是类,因此不能用new运算符实例化一个接口。 可以定义接口变量(引用),此变量必须引用实现了接口的类对象 Shapes3.java,interface CanGrow class Tree implements CanGrow

9、 class Test public static void main(String args) CanGrow g = new Tree(); ,接口,注意事项 如果实现某接口的类不是 abstract 修饰的抽象类,则在类的定义部分必须实现指定接口的所有抽象方法 如果实现某接口的类是abstract 修饰的抽象类,则它可以不实现该接口所有的方法 接口的抽象方法的访问限制符缺省地指定为public,所以类在实现这些抽象方法时,必须显式地使用public修饰符,接口,接口的作用: 通过接口实现不相关类的相同行为,而不需要考虑这些类之间的关系。 指明多个类需要实现的方法。 可以了解对象的交互界面

10、,而不需要了解对象对应的类。 抽象类与接口的语义区别:例如,对于“照明”这个方法,电灯、火柴都可以照明,但电灯、火柴分属不同的类,并各自有自己的其他属性和方法,这时就可以用接口来定义“照明”方法。,Java的多重继承,有时我们需要表示“一个x是一个a和一个b和一个c” 在C+中,组合多个类的接口的行为称为多重继承,但在Java中没有多重继承 在java中,接口没有具体实现,因此不会存在C+中的问题 一个类可以实现多个接口,在implements子句中用逗号分开 Adventure.java,class ClassName implements IF1,IF2,IF3 /. ,通过继承来扩展接口

11、,可以通过继承在接口中添加新的方法声明,或者组合多个接口 HorrorShow.java,内部类,内部类 :将一个类的定义放在另一个类的定义内部,class OutClass private int generalInt; void generalMethod () InnerClass innerClass = new InnerClass(); innerClass.innerInt = 1; class InnerClass private int innerInt; ,内部类的访问,由于内部类实际上也是外部类的一个成员定义,在类中如同使用其他类一样可以使用自己的内部类 内部类拥有对在所

12、有外层类中定义的所有属性和方法的访问权 MultiNestingAccess.java 如果其他类要使用内部类,则需要使用以下代码形式,OutClass outClass = new OutClass(); OutClass.InnerClass innerClass = outClass.new InnerClass();,匿名内部类,没有名字的类,类的定义和对象创建是同时进行的,也就是说定义实际上写在new的代码中,而不使用class关键字 匿名类不能有修饰符,也不能定义构造器,匿名内部类,含义:创建一个实现ActionListener接口的类的新对象,需要实现的方法actionPerformed()定义在花括号 内,public void start(int interval, final boolean beep) ActionListener listener =

温馨提示

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

评论

0/150

提交评论