1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,11,讲 最终类、内部类和匿名类,一、最终类,1,、声明最终类:,使用关键字,final,声明的类称为最终类,最终类不能被继承,即不能声明最终类的子类。,public final class Math extends Object,/,数学类,最终类,抽象类不能被声明为最终类。,2,、声明最终方法:,使用,final,声明成员方法称为最终方法,最终方法不能被子类覆盖。,public class Circle extends Graphics,public final double area()/,最终方法,
2、不能被子类覆盖,return Math.PI*this.radius*this.radius;,说明:最终类可以不包含最终方法,非最终类可以包含最终方法。,3,二、内部类,我们已经知道:类可以有两种重要的成员:成员变量和方法,类还可以有一种成员:内部类。,Java,支持在一个类中声明另一个类,这样的类称作,内部类,,而包含内部类的类成为内部类的,外嵌类,。内部类同类中声明的方法或成员变量一样,一个类把内部类看作是自己的成员。外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。内部类的类体中不可以声明类变量和类方法。外嵌类可以用内部类声明对象,作为外嵌类的成员。下面让我们
3、结合这个,例子,更好的了解内部类。,返回,4,内部类和嵌套类,静态的内部类称嵌套类(,Nested,Class,),如:,class,Outer,class,Inner,/Inner,class,static,class,Nested,/Nested,class,区别:,1.,内部类的对象隐含一个外部类的对象引用,可以直接引用外部类的方法和属性。另外内部类不能定义静态的属性和方法,创建内部类对象必须依赖于一个外部对象。,2.,嵌套类不能直接引用外部类的,non-satic,属性和方法,创建嵌套类对象时不依赖外部类对象。,5,三、匿名类,1,和类有关的匿名类,当使用类创建对象时,程序允许我们把类
4、体与对象的创建组合在一起,也就是说,类创建对象时,除了构造器还有类体,此类体被认为是该类的一个子类去掉类声明后的类体,称作匿名类。,匿名类就是一个子类,由于无名可用,所以不可能用匿名类声明对象,但却可以直接用匿名类创建一个对象。假设,Hello,是类,那么下列代码就是用,Hello,的一个子类(匿名类)创建对象:,new Hello(),匿名类的类体,匿名类可以继承类的方法也可以重写类的方法。我们使用匿名类时,必然是在某个类中直接用匿名类创建对象,因此匿名类一定是内部类,匿名类可以访问外嵌类中的成员变量和方法,匿名类不可以声明,static,成员变量和,static,方法。匿名类的主要用途就是向方法的参数传值。,下面的,例子,展示了匿名类的用法。,6,三、匿名类,2,和接口有关的匿名类,假设,Computable,是一个接口,那么,,Java,允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了,Computable,接口的类去掉类声明后的类体,称作匿名类。下列代码就是用实现了,Computable,接口的类(匿名类)创建对象:,new Computable(),实现接口的匿名类的类体,如果某个方法的参数是接口类型,那么我们可以使用接口名和类体组合创建一个匿名对象传递给方法的参数,类体必须要实现接口中的全部方法。,