第八讲Java 高级语言特征课件

上传人:我*** 文档编号:140985719 上传时间:2020-08-03 格式:PPT 页数:44 大小:165KB
返回 下载 相关 举报
第八讲Java 高级语言特征课件_第1页
第1页 / 共44页
第八讲Java 高级语言特征课件_第2页
第2页 / 共44页
第八讲Java 高级语言特征课件_第3页
第3页 / 共44页
第八讲Java 高级语言特征课件_第4页
第4页 / 共44页
第八讲Java 高级语言特征课件_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《第八讲Java 高级语言特征课件》由会员分享,可在线阅读,更多相关《第八讲Java 高级语言特征课件(44页珍藏版)》请在金锄头文库上搜索。

1、1,第八讲 Java 高级语言特征,静态变量、方法与初始化程序块 final 关键字 抽象类 Interface package 访问控制 内部类 其它,2,类变量(static /class variable),在该类所有实例之间是共享的。在加载该类时,只分配 一次空间,并初始化。 例:class Employee static int com ; 则运行时,,3,类变量(static /class variable),类变量可用来在实例之间进行通信或跟踪该类实例的数目。,例:public class Count private int serialNumber ; private stat

2、ic int counter = 0 ; public Count( ) counter+ ; serialNumber = counter ; ,4,类变量可以是public 或private 对于public 类型的类变量,可以在类外直接用类名调用而不需要初始化。 Public class StaticVar public static int number ; public class Otherclass public void method() int x = StaticVar.number ; ,类变量(static /class variable),5,类(class/stat

3、ic)方法,可以直接被调用,而不需要生成任何实例 public class GeneralFunction public static int addUp(int x, int y) return x+y ; public calss UseGeneral public void method() int c = GeneralFunction.addUp(9,10); ,6,静态初始化程序,没有存在于任何方法体中的静态语句块。在加载该类时执行且只执行一次。 public Class StaticInitDemo static int i=5; static System.out.printl

4、n(“Static code: i=”+i+); public class Test public static void main(String args) System.out.println(“ Main code: i=”+ StaticInitDemo.i); ,Static code: i=5 Main code: i = 6,7,Final 关键字, 被定义成final的类不能有子类。 例: final class Employee class Manager extends Employee 被定义成final 的成员方法不能被重写。 被定义成final的成员变量不能改变。该变

5、量实际上 是常量,一般大写,并赋值。 final int NUMBER = 100;,8,抽象类,一个类如果只声明方法而没有方法的实现,则称为抽象类。 必须在声明中增加 abstract 关键字,在无方法体的方法前 也要加上abstract。 Public abstract class Drawing public abstract void drawDot( int x, int y); public void drawLine(int x1, int y1, int x2,int y2) . / 调用drawDot()方法 抽象类也可有普通的成员变量或方法。,9,抽象类,抽象类不能直接用来

6、生成实例。一般可通过定义 子类进行实例化。 可以定义抽象类的变量,该变量可以指向具体的一个 子类的实例。,Abstract class Employee abstract void raiseSalary(int i) ; class Manager extends Employee void raiseSalary(int i ) . ,Employee e = new Manager( ) ;,10,抽象类的作用,使类的设计变得清晰 为类的体系提供通用接口,并支持多态。,11,接口 interface, Interface 是在抽象类概念的基础上演变而来的。 一个interface所有成员

7、方法都是抽象的,并且只能 定义 static final 成员变量。,12,接口的定义,接口声明 接口体 ,接口声明的格式如下: public interface 接口名 extends 接口列表,接口体包含常量定义和方法声明两部分 接口中定义的常量默认具有public,final,static属性。定义格式为: type NAME=value; 接口中生命的方法默认具有public,abstract属性。定义格式为: returnType methodName(paralist);,13,Interface 的含义,interface定义了一组行为的协议。实现一个接口的类将具有该接口规定的行

8、为,外界可以通过这些接口与该类的对象通信。 interface 不属于类层次结构。不相关的类可以实现相同的接口。,14,Interface 示例,15,用implements代替extends声明类,该类中可以使用接口中定义的常量,而且必须实现接口(及其父接口)中的所有方法。 例:interface SayHello void printMessage( ); class SayHelloImpl implements SayHello void printMessage( ) System.out.println(“Hello”); ,实现interface,16,Interface的使用,

9、Interface可以作为一种数据类型使用。 如:,public class StockMonitor public void watchStock(StockWatcher watcher, String tickerSymbol, double delta) . ,Watcher是一个实现了StockWatcher接口的类的对象,17,问题:如何增加接口的方法同时避免对原有程序的修改?,不应该向interface定义中随意增加方法。 public interface StockWatcher final String sunTicker = SUNW; final String oracl

10、eTicker = ORCL; final String ciscoTicker = CSCO; void valueChanged(String tickerSymbol, double newValue); void currentValue(String tickerSymbol, double newValue); ,一种好的办法是,public interface StockTracker extends StockWatcher void currentValue(String tickerSymbol, double newValue); ,为什么?,18,问题:如何将多个接口合

11、并为一个接口?,答案:定义一个子接口,该子接口继承所有要合并的接口。 public interface 接口名 extends 接口列表,19,可以通过实现接口实现多重继承:一个类可只继承 一个父类,并实现多个接口。 interface I1 ; interface I2 ; class E . ; class M extends E implements I1,I2 一个interface 可作为类名使用,实现多态。,接口 interface,Interface Human class Chinese implements Human class Japanese implements Hu

12、man . Human e = new Chinese( ); Human e = new Japanese( );,20,接口与抽象类,接口与抽象类的异同? 使用接口的优势 实现多重继承,从而可以使子类对象上溯造型为多个基础类型。可以把seaPlane当sailer用,也可以当flyer用。 可抽象出不相关类之间的相似性,而不会形成类的继承关系。 在什么情况下使用接口?什么情况下使用抽象类?,21,类分组 package 语句,包(package)是相关类与接口的一个集合,可以通过包进行访问控制与命名空间管理(避免命名冲突)。 Java平台中的类与接口都是根据功能以包组织的。 包机制的好处:

13、 程序员容易确定包中的类是相关的,并且容易根据所需的功能找到相应的类。 每个包都创建一个新的命名空间,因此不同包中的类名不会冲突。 同一个包中的类之间有比较宽松的访问控制。,22,创建包,用package语句指定源文件中的类属于一个特定包: package 包名 包定义语句在每个源程序中只能有一条, 即一个类只能属 于一个包。 包定义语句必须在程序的第一行(之前可有空格及注释)。 包名用“.” 分隔。,23,包中成员的使用,有三种方法(假设包graphics中定义了类Circle) 用长名:包名.包中的成员名 graphics.Circle myCircle=new graphics.Circ

14、le(); 引入包中的成员:import 包名.包中的成员名 import graphics.Circle; Circle myCircle=new Circle(); 引入整个包:import 包名 import graphics.* Circle myCircle=new Circle();,24,包名与包中类的存储位置,包分隔符相当于目录分隔符,包存储的路径由包根路径加上包名指明的路径组成。 包的根路径由CLASSPATH环境变量指出。 %CLASSPATH%abc financeDept,25,源文件(.java)与类文件(.class)的管理,源文件可以按照包名指明的路径放置。如,类

15、文件也应该放在反映包名的一系列目录下。,26,一般将源文件与类文件分别存放,可采用如下方式:,源文件(.java)与类文件(.class)的管理,示例,27,高级访问控制,成员变量和方法有4种访问级别: public, protected, default(package), private ; 类有两种访问级别:public 或default。 修饰符的作用范围: Modifier Same class Same Package Subclass Universe public Yes YesYes Yes protected Yes Yes Yes default Yes Yes priv

16、ate Yes,28,class Alpha private int iamprivate; private void privateMethod() System.out.println(privateMethod); class Beta void accessMethod() Alpha a = new Alpha(); a.iamprivate = 10; a.privateMethod(); ,高级访问控制-private,/ illegal,/ illegal,29,class Alpha private int iamprivate; boolean isEqualTo(Alpha anotherAlpha) if (this.iamprivate = anotherAlpha.iamprivate) return true; else return false; ,高级访问控制,注意:访问控制应用于class或type 层次,而不是对象层次。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号