- 1、本文档共44页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章Java继承、多态与接口资料
注意: 在类中实现接口所定义的方法时,方法的声明必须与接口中所定义的完全一致。 在类中实现接口所定义的方法时,必须显式地使用public修饰符,否则将被系统警告为缩小了接口中定义的方法的访问控制范围。 抽象类可以不实现接口的抽象方法,而非抽象类必须实现接口中的所有方法。 9.3 其他 final关键字 final在类之前 表示该类是最终类,不能再被继承。 由于安全性的原因或者是面向对象的设计上的考虑,有时候希望一些类不能被继承,例如,Java中的String类,它对编译器和解释器的正常运行有很重要的作用,不能轻易改变它,因此把它修饰为final类,使它不能被继承,这就保证了String类型的唯一性。 final在方法之前 表示该方法是最终方法,用final修饰的方法不能再被子类重写;该方法不能被任何派生的子类覆盖。 final在变量之前 表示变量的值在初始化之后就不能再改变;相当于定义了一个常量。 实例成员和类成员 Java类包括两种类型的成员:实例成员和类成员。 除非特别指定,定义在类中的成员一般都是实例成员。 【例】实例成员举例 class AnIntergerNamedX{ int x; public int x(){ return x; } public void setX(int newX){ x=newX; } } 声明了实例变量之后,当每次创建类的一个新对象时,系统就会为该对象的所有成员创建实例变量的副本,然后就可以通过对象访问这些实例变量。 实例方法是对当前对象实例变量进行操作的,而且可以访问类变量。 static 在变量或方法之前,表明它们是属于类的,称为类方法(静态方法)或类变量(静态变量)。 类成员用static修饰符声明,格式如下: static type classVar; static return Type classMethod([paramlist]){ …… } 分别声明了类变量和类方法。 类变量 类变量用static修饰符声明。 系统只为每个类分配类变量,而不管类创建的对象有多少。当第一次调用类的时候,系统为该类变量分配内存,所有的对象共享了该类的类变量。因此,可以通过类本身或者某个对象来访问该类变量。 【例】类变量举例 class AnIntergerNamedX{ static int x; public int x(){ return x; } public void setX(int newX){ x=newX; } } 输出的两个变量结果相同,这是因为x是一个类变量,因此,就只有该类变量的唯一副本,它被该类的所有对象所共享,包括myX和anotherX。当在任一对象中调用setX的时候,也就改变了该类所有对象所共享的值。 结果输出为: myX.x=2 anotherX.x=2 类方法 为了指定方法为一个类方法,可以在方法声明的地方使用static关键字。 类方法只能操作类变量而不能直接访问在类中定义的实例变量,除非这些类方法创建了一个新的对象,并通过对象访问它们。 类方法可以在类中被调用,不必通过一个实例来调用一个类方法。 Java程序的入口方法main()就是一个类方法。 【例】不正确的引用 class AnIntergerNamedX{ int x; static public int x(){ return x; } static public void setX(int newX){ x=newX; } } 当编译这个类时,就会出错。原因是类方法不能访问实例变量。 static 解决方法: 1.将变量变成类变量; 2.创建一个类的对象,并且通过该对象来访问变量。 同一个类的实例方法可以访问该类的类变量和类方法; 而类方法只能访问该类的类变量和类方法,不能直接访问实例的变量和方法。 内嵌类 在一个类的内部声明的类,称为内嵌类。 内嵌类只能在包含它的类中使用,同时它可以看作是该包含类的一段特殊代码,可以直接使用该包含类的变量和方法。 内嵌类编译后也会形成一个单独的class,但它附属于其包含类。 public class Stack { private Vector items; ...//code for Stacks methods and constructors not shown... public Enumeration enumerator() { return new StackEnum(); } class StackEnum
文档评论(0)