[高等教育]第8章 面象对象—接口、内部类与包ppt课件_第1页
[高等教育]第8章 面象对象—接口、内部类与包ppt课件_第2页
[高等教育]第8章 面象对象—接口、内部类与包ppt课件_第3页
[高等教育]第8章 面象对象—接口、内部类与包ppt课件_第4页
[高等教育]第8章 面象对象—接口、内部类与包ppt课件_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、第第8 8章章 接口、内部类与包接口、内部类与包本章目的本章目的掌握接口的概念与定义掌握接口的概念与定义了解掌握接口的运用及与笼统类的区别了解掌握接口的运用及与笼统类的区别掌握内部类的概念与定义掌握内部类的概念与定义了解掌握内部类与外部类的相互访问以及了解掌握内部类与外部类的相互访问以及 内部类的特殊运用内部类的特殊运用掌握包的概念与自定义包的创建掌握包的概念与自定义包的创建掌握运用掌握运用jar命令打包生成可执行的命令打包生成可执行的jar文件包文件包最终类的概念最终类的概念假设一个类被声明为假设一个类被声明为final,那么意味着它不能再派,那么意味着它不能再派生新的子类。生新的子类。fi

2、nal class name第第8 8章章 最终类最终类最终方法最终方法假设类中的方法不希望被子类修正,那么可以把方假设类中的方法不希望被子类修正,那么可以把方法定义成最终方法。法定义成最终方法。final int add( ) final类不能被承继类不能被承继final 方法不能被覆盖。方法不能被覆盖。final常量不能被修正。常量不能被修正。第第8 8章章 最终类最终类笼统方法笼统方法假设一个方法只需方法声明,而没有方法体,那么假设一个方法只需方法声明,而没有方法体,那么该方法是笼统方法。有关键字该方法是笼统方法。有关键字abstract修饰。修饰。abstract int add(in

3、t x, int y); 笼统方法在承继机制中必需被子类覆盖。除非子类笼统方法在承继机制中必需被子类覆盖。除非子类中该方法也是笼统方法。中该方法也是笼统方法。第第8 8章章 笼统类笼统类笼统类笼统类包含笼统方法的类是笼统类,有包含笼统方法的类是笼统类,有abstract修饰。修饰。abstract class A成员变量;成员变量;成员方法;可以是普通方法,也可以是笼统成员方法;可以是普通方法,也可以是笼统方法方法笼统类不能实例化对象,所以没有构造方法。笼统类不能实例化对象,所以没有构造方法。第第8 8章章 笼统类笼统类接口的概念接口的概念接口主要作用是实现类似于接口主要作用是实现类似于C+类

4、的多重承继的功类的多重承继的功能能在在Java中,出于简化程序构造的思索,不再支持类中,出于简化程序构造的思索,不再支持类间的多重承继而只支持单重承继,即一个类至多只能间的多重承继而只支持单重承继,即一个类至多只能有一个直接父类,构造简单,层次明晰;有一个直接父类,构造简单,层次明晰;然而在处理实践问题的过程中,仅仅依托单重承继然而在处理实践问题的过程中,仅仅依托单重承继在很多情况下都不能将问题的复杂性表述完好;在很多情况下都不能将问题的复杂性表述完好;Java经过接口机制与单一承继实现了多重承继的功经过接口机制与单一承继实现了多重承继的功能能第第8 8章章 面象对象面象对象接口、内部类与包接

5、口、内部类与包接口的概念接口的概念当一个类中一切的方法都是笼统方法时,该类就是当一个类中一切的方法都是笼统方法时,该类就是接口。接口。abstract class Animalpublic abstract void move(); public abstract void cry(); interface Animal常量;常量;public void move(); public void cry(); 第第8 8章章 面象对象面象对象接口、内部类与包接口、内部类与包 8.1 .1 8.1 .1 接口声明接口声明public interface 接口名接口名 extends 父接口名列父接

6、口名列表表 变量声明;变量声明; /常量常量 方法声明;方法声明; /笼统方法笼统方法 接口声明的普通方式:接口声明的普通方式:接口:是没有实现的方法和常量的集合,声明接口:是没有实现的方法和常量的集合,声明格式如下:格式如下: 没有没有public只可以被同一个包的类承继,只可以被同一个包的类承继,否那么,可以被一切类承继;否那么,可以被一切类承继; 一个一个java文件中最多只能有一个文件中最多只能有一个public的类的类或接口,有或接口,有public的类或接口时,编译单的类或接口时,编译单必需与这个类或接口同名;必需与这个类或接口同名;public interface 接口名接口名

7、extends 父接口名列表父接口名列表 变量声明;变量声明; /常量常量 方法声明;方法声明; /笼统方法笼统方法 关于接口的几点阐明关于接口的几点阐明 被声明的变量总是被视为static和final的,必需在声明时给定初值,相当于常量; 接口中的的方法总是abstract的,声明时缺省也有效。与笼统类一样,接口不需求构造方法public interface 接口名接口名 extends 父接口名列表父接口名列表 变量声明;变量声明; /常量常量 方法声明;方法声明; /笼统方法笼统方法 关于接口的几点阐明关于接口的几点阐明 接口可以承继其它接口,由关键字接口可以承继其它接口,由关键字ext

8、ends实现实现 与类不同的是接口可以实现多重承继,与类不同的是接口可以实现多重承继,SuperInterfaceList是父接口名表,可以有多个父是父接口名表,可以有多个父接口,用逗号分隔接口,用逗号分隔 public interface 接口名接口名 extends 父接口名列表父接口名列表 变量声明;变量声明; /常量常量 方法声明;方法声明; /笼统方法笼统方法 关于接口的几点阐明关于接口的几点阐明public interface 接口名接口名 extends 父接口名列表父接口名列表 变量声明;变量声明; /常量常量 方法声明;方法声明; /笼统方法笼统方法 接口是由常量和笼统方法接

9、口是由常量和笼统方法 组成的特殊笼统类组成的特殊笼统类/相当于类中的静态常量相当于类中的静态常量/都是只声明的笼统方法都是只声明的笼统方法一个学生信息接口的声明:一个学生信息接口的声明: interface Stu_inforint year=2002; int age();void output(); 其中,接口中声明了一个成员变量其中,接口中声明了一个成员变量year,成员方法,成员方法age 接口中声明的变量都默以为接口中声明的变量都默以为public的,的,static的、的、final的,在的,在声明时须初始化,相当于常量;声明时须初始化,相当于常量; 接口中的方法总是接口中的方法总

10、是public的,的,abstract的,在声明时这些修饰的,在声明时这些修饰符都可以省略。符都可以省略。 接口不需求构造方法,接口中的方法都是没有方法体的笼统接口不需求构造方法,接口中的方法都是没有方法体的笼统方法方法几点阐明几点阐明格式如下:格式如下:8.1 .2 8.1 .2 接口的实现接口的实现 修饰符修饰符 class 类名类名 extends 超类名超类名 implements 接口名接口名1, 接口名接口名2,.interface Student_info int year = 2002; int age( ); void output();public class Stu1 i

11、mplements Student_info String name; int birth_year; public Stu1(String n1,int y) name = n1; birth_year = y; public int age() return year - birth_year; public void output() System.out.println( + + this.age()+岁岁); public static void main (String args) Stu1 s1 = new Stu1(李明李明,1980); s1.output(

12、); 例例6.1 实现接口的类实现接口的类声明的接口:变量是常量,声明的接口:变量是常量,方法没有方法体的笼统方法方法没有方法体的笼统方法实现接口的类,并实现接口的类,并定义了类本身的成定义了类本身的成员变量员变量实现接口的方法:实现接口的方法:age( ); output( )【例【例8.18.1】 接口的实现接口的实现interface Student_info /学生情况接学生情况接口口 int year = 2002; int age(); void output();interface Student_scoure /学生成果接口学生成果接口 float total(); void

13、output(); 两个接口具有一个同名的方法; 下面定义一个同时实现两个接口的类【例【例8.28.2】 接口的运用接口的运用public class Stu2 implements Student_info, Student_scoure String name; int birth_year; float math, english, computer; public Stu2(String n1,int y,float a,float b,float c) name = n1; birth_year = y; math = a; english = b; computer = c; pu

14、blic int age() return year - birth_year; public float total() return math + english + computer; public void output() System.out.print( + + this.age()+岁岁 ); System.out.println(math + + english + + computer + + total(); public static void main (String args) Stu2 s2 = new Stu2(李明李明,1980,90,80,

15、70); s2.output(); /实现学生情况接口、学生成果接口/构造方法/实现接口中的方法/实现接口中的方法/同时实现两个接口中的方法笼统类通常代表一个笼统的概念,它提供一个承继的出发点笼统类通常代表一个笼统的概念,它提供一个承继的出发点;笼统类中即可以声明笼统方法,还能声明曾经实现的方法笼统类中即可以声明笼统方法,还能声明曾经实现的方法 非笼统方法非笼统方法;接口只含有笼统方法,假设在一个笼统类添加一个新的曾经接口只含有笼统方法,假设在一个笼统类添加一个新的曾经 实现的方法,一切的子类都可直接承继该方法,而接口不能实现的方法,一切的子类都可直接承继该方法,而接口不能;类可以承继多个接口

16、,而类只能承继一个超类类可以承继多个接口,而类只能承继一个超类 笼统类或其他笼统类或其他;接口是一个比笼统类更加笼统的概念。接口是一个比笼统类更加笼统的概念。 学好接口有助于更好的了解和运用面向对象的设计原那么,学好接口有助于更好的了解和运用面向对象的设计原那么, 设计出更好的软件系统。设计出更好的软件系统。 8.2 8.2 内部类内部类 一个类嵌套定义在另一个类的内部,称为内部类inner class包含内部类的类称为外部类与普通的类一样,内部类可以有本人的成员变量和成员方法。 运用内部类必需求先了解内部类与包围它的外部类之间的关系, 以及它们之间的成员如何实现相互访问。内部类定义举例内部类

17、定义举例public class Group1 int count; /外部类的成员变量外部类的成员变量 public class Student /声明内部类声明内部类 String name; /内部类的成员变量内部类的成员变量 public void output() /内部类的成员方法内部类的成员方法 System.out.println( + ); 【例【例8.3】内部类的定义】内部类的定义8.2.1 8.2.1 内部类的特性内部类的特性 java将内部类作为外部类的一个成员,就好像其成员变量与将内部类作为外部类的一个成员,就好像其成员变量与 成员方法一样;成员方法

18、一样;所以,普通类只能是所以,普通类只能是public和非和非public缺省,而内部类可缺省,而内部类可以指定为以指定为 private 和和 protected访问权限同其他成员;访问权限同其他成员;内部类可以实现接口及笼统类中的笼统方法内部类可以实现接口及笼统类中的笼统方法外层类可以将上述实现细节乃至内部类都隐藏起来,给外层类可以将上述实现细节乃至内部类都隐藏起来,给 外界提供接口外界提供接口8.2.2 8.2.2 内部类的特性内部类的特性 内部类与外部类的访问规那么内部类与外部类的访问规那么内部类与外部类各有本人的成员;内部类与外部类各有本人的成员;在外部类中,经过内部类对象援用内部类

19、;在外部在外部类中,经过内部类对象援用内部类;在外部类的类的 main方法或其他类中访问内部类,必需给出内部类方法或其他类中访问内部类,必需给出内部类的的 完好名字,如,完好名字,如, Group1. Student在内部类中,可以直接援用外部类的一切成员,包在内部类中,可以直接援用外部类的一切成员,包括外部类的静态成员、实例成员以及私有成员;括外部类的静态成员、实例成员以及私有成员;举例如下,举例如下,public class Group2 private int count; public class Student String name; public Student(String n

20、1) name = n1; count+; public void output() System.out.print( + ); public void output() Student s1 = new Student(李明李明); s1.output(); System.out.println( count = +this.count); public static void main (String args) Group2 g2 = new Group2( ); g2.output(); Group2.Student s=g2.new Student(李四李四);

21、s.output(); 声明内部类声明内部类访问其外部类访问其外部类的成员变量的成员变量内部类的成员:内部类的成员:name,output()外部类方法,与内部外部类方法,与内部类方法同名类方法同名创建内部类对象,创建内部类对象,并经过内部类对象并经过内部类对象 访访问内部类成员问内部类成员8.2.2 8.2.2 内部类的特性内部类的特性 内部类可以定义为笼统类型内部类可以定义为笼统类型但需求被外部类的其他内部类承继与实现但需求被外部类的其他内部类承继与实现内部类可以是一个接口内部类可以是一个接口但这个接口需求被外部类的其他内部类实现但这个接口需求被外部类的其他内部类实现8.2.4 8.2.4

22、 静态内部类静态内部类假设一个内部类是静态的,那么静态内部类中假设一个内部类是静态的,那么静态内部类中的方法无论是静态的方法还是非静态的方法的方法无论是静态的方法还是非静态的方法只能直接访问外部类中的静态成员只能直接访问外部类中的静态成员要访问外部类中的非静态成员,那么必需在内要访问外部类中的非静态成员,那么必需在内部类创建外部类的对象,经过对象名访问外部非部类创建外部类的对象,经过对象名访问外部非静态成员静态成员只需静态内部类才可以声明静态成员;只需静态内部类才可以声明静态成员;静态内部类无法正常访问外部类非静态成员,静态内部类无法正常访问外部类非静态成员,遭到限制遭到限制 需求在内部类定义

23、静态成员;需求在内部类定义静态成员; 希望隐藏内部类;希望隐藏内部类; 防止类名反复防止类名反复 为了防止这种情况,可以把能够重名的类设置为为了防止这种情况,可以把能够重名的类设置为static、public的内部类的内部类 其他类在援用时要运用完成的内部类名标识外部其他类在援用时要运用完成的内部类名标识外部类名类名.内部类名,这样就防止了类名反复。内部类名,这样就防止了类名反复。运用静态内部类的缘由运用静态内部类的缘由 【例【例5.5】 静态内部类静态内部类public class Group6 public static class Student static int count; St

24、ring name; int number; public Student(String n1) name = n1; count+; number = count; public void output() System.out.println( + number=+this.number); public static void main (String args) Group6.Student s1 = new Group6.Student(“张三张三); s1.output(); Group6.Student s2 = new Group6.Student(“李四李四

25、); s2.output(); 定义静态公用内部类定义静态公用内部类静态内部类中的静态内部类中的静态变量静态变量纪录创建对象的序号纪录创建对象的序号静态内部类的构造方法静态内部类的构造方法创建一个对象创建一个对象序号自动添加序号自动添加在静态在静态main方法中,经过完好的内方法中,经过完好的内部类标示符创建内部类对象部类标示符创建内部类对象在静态在静态main方法中,经过完好的内部类标示符方法中,经过完好的内部类标示符Group6.Student创建内部类对象,并运用静态创建内部类对象,并运用静态成员变量记录创建对象的序号成员变量记录创建对象的序号8.2.5 8.2.5 静态内部类的特殊用法

26、静态内部类的特殊用法编译上面源程序Group6.Java,查看类的字节码文件,不但有编译后产生的类Group6的字节码文件Group6 .class,还产生一个名字为Group6 $ Student.class的文件,嵌套类的字节码文件名是以外部类名和“$开头,接着是嵌套类的名字在开发运用程序时需求编写大量的类,并需求对这些类进展调试、演示根据静态内部类的特点,在编写一个类时,在类中可以定义一个静态内部类作为一个独立的、可选的辅助功能,如,用作代码的测试和演示,方便而有效 public class Outer /外部类外部类 private int i, j; static int s=1;

27、Outer(int a,int b) i=a; j=b; public void dis() System.out.println(i+ +j); public static class Test /含有静态含有静态main方法的静态内部类方法的静态内部类 public static void main (String args) /测试外部类测试外部类 Outer t=new Outer(10,100); /创建外部类对象创建外部类对象 t.dis(); System.out.println(s); /静态内部类可访问外部类静态成员静态内部类可访问外部类静态成员 【例【例8.68.6】利用静

28、态内部类调试外部类】利用静态内部类调试外部类 首先编译源程序首先编译源程序Outer.java,会产生两个,会产生两个class文文件:件:Outer.class和和Outer$Test.class。然后运转。然后运转Outer$Test可完成对外部类的测试可完成对外部类的测试 Java将嵌套类分将嵌套类分2类:嵌套顶层类类:嵌套顶层类nested top-level classes和内部类和内部类inner classes,内部类又分为:,内部类又分为: 实例内部类实例内部类instance inner class; 本地内部类本地内部类local inner class 匿名内部类匿名内部

29、类and anonymous inner class 所谓顶层类就是它没有超类,假设在内部类的声明所谓顶层类就是它没有超类,假设在内部类的声明前加上前加上static的修饰符,该内部类自动转化为顶层类。的修饰符,该内部类自动转化为顶层类。内部类的其他特性内部类的其他特性 除了可以把内部类声明为静态的,内部类还可以可以定义为除了可以把内部类声明为静态的,内部类还可以可以定义为笼统类或接口,那么这个笼统类或接口必需由另一个内部类笼统类或接口,那么这个笼统类或接口必需由另一个内部类来实现。来实现。 Java还提供了本地内部类,它可以出如今恣意的代码块中,还提供了本地内部类,它可以出如今恣意的代码块中

30、,包括一个方法体中或者一个包括一个方法体中或者一个for语句的代码块语句的代码块 假设一个本地内部类没有声明名字,这就是假设一个本地内部类没有声明名字,这就是Java中的匿名内中的匿名内部类部类 匿名类是一种特殊的内部类,它是在一个表达式内部包含一匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完好的类定义。个完好的类定义。 内部类的其他特性内部类的其他特性 JARJava Archive是一种与平台无关的文档格式,用是一种与平台无关的文档格式,用于将多个文件紧缩为一个文件于将多个文件紧缩为一个文件JAR 文件可以说就是一个紧缩的文件可以说就是一个紧缩的ZIP文件,与文件,与 ZIP 文

31、件的文件的区别有两点:区别有两点:首先在首先在 JAR 文件中,包含了一个文件中,包含了一个 META-INF子目录,在子目录,在该子目录中有个该子目录中有个MANIFEST.MF 文件,这个文件是在生成文件,这个文件是在生成 JAR 文件的时候系统自动创建的,该文件称为清单文件;文件的时候系统自动创建的,该文件称为清单文件;其次其次JAR 文件可被文件可被Java2平台识别并解释执行。平台识别并解释执行。8.3 jAR文件留意:在留意:在jdk环境下,无法把编写的环境下,无法把编写的java源程序打包源程序打包生成可执行的生成可执行的exe文件,但可经过工具实现。文件,但可经过工具实现。8.3 8.3 制造制造JARJAR文件文件制造一个可执行的JAR 文件包来发布程序是JAR 文件最典型的用法假设要制造一个可执行的JAR 文件,需求在META-INF 目录下的清单文件MANIFEST.MF中指明主类,也就是包含main()方法的类的称号:Main-Class: theMainclass留意:“:和主类名之间有必需有一个空格,而且只能有一个空格。该行以一个换行符作为终了符class theD

温馨提示

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

评论

0/150

提交评论