《第11讲 最终类、类、匿名类.ppt》由会员分享,可在线阅读,更多相关《第11讲 最终类、类、匿名类.ppt(6页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第第1111讲讲 最终类、内部类和匿名类最终类、内部类和匿名类一、最终类1 1、声明最终类:、声明最终类:n使用关键字使用关键字finalfinal声明的类称为最终类,最终类不能被继承,声明的类称为最终类,最终类不能被继承,即不能声明最终类的子类。即不能声明最终类的子类。npublic final class Math extends Objectpublic final class Math extends Object/数学类,最终类数学类,最终类n抽象类不能被声明为最终类。抽象类不能被声明为最终类。2 2、声明最终方法:、声明最终方法:使用使用finalfinal声明成员方法称为最终方法
2、,最终方法不能被子类声明成员方法称为最终方法,最终方法不能被子类覆盖。覆盖。public class Circle extends Graphicspublic class Circle extends Graphicspublic final double area()/public final double area()/最终方法,不能被子类覆盖最终方法,不能被子类覆盖 return Math.PI*this.radius*this.radius;return Math.PI*this.radius*this.radius;说明:最终类可以不包含最终方法,非最终类可以包含最终方说明:最终类
3、可以不包含最终方法,非最终类可以包含最终方法。法。3二、内部类二、内部类 我们已经知道:类可以有两种重要的成员:成员变量我们已经知道:类可以有两种重要的成员:成员变量和方法,类还可以有一种成员:内部类。和方法,类还可以有一种成员:内部类。JavaJava支持在一个支持在一个类中声明另一个类,这样的类称作类中声明另一个类,这样的类称作内部类内部类,而包含内部类,而包含内部类的类成为内部类的的类成为内部类的外嵌类外嵌类。内部类同类中声明的方法或成。内部类同类中声明的方法或成员变量一样,一个类把内部类看作是自己的成员。外嵌类员变量一样,一个类把内部类看作是自己的成员。外嵌类的成员变量在内部类中仍然有
4、效,内部类中的方法也可以的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。内部类的类体中不可以声明类变量调用外嵌类中的方法。内部类的类体中不可以声明类变量和类方法。外嵌类可以用内部类声明对象,作为外嵌类的和类方法。外嵌类可以用内部类声明对象,作为外嵌类的成员。下面让我们结合这个成员。下面让我们结合这个例子例子更好的了解内部类。更好的了解内部类。返回返回4内部类和嵌套类 n静态的内部类称嵌套类(静态的内部类称嵌套类(Nested Class),如:),如:class Outer class Inner /Inner class static class Nested /Nes
5、ted class 区别:区别:n1.内部类的对象隐含一个外部类的对象引用,可以直接引用外部类的方内部类的对象隐含一个外部类的对象引用,可以直接引用外部类的方法和属性法和属性。另外内部类不能定义静态的属性和方法,创建内部类对象必。另外内部类不能定义静态的属性和方法,创建内部类对象必须依赖于一个外部对象。须依赖于一个外部对象。n2.嵌套类不能直接引用外部类的嵌套类不能直接引用外部类的non-satic属性和方法,创建嵌套类对象属性和方法,创建嵌套类对象时不依赖外部类对象。时不依赖外部类对象。5三、三、匿名类匿名类 1 1和类有关的匿名类和类有关的匿名类 当使用类创建对象时,程序允许我们把类体与对
6、象的创建组合在一起,当使用类创建对象时,程序允许我们把类体与对象的创建组合在一起,也就是说,类创建对象时,除了构造器还有类体,此类体被认为是该类的也就是说,类创建对象时,除了构造器还有类体,此类体被认为是该类的一个子类去掉类声明后的类体,称作匿名类。一个子类去掉类声明后的类体,称作匿名类。匿名类就是一个子类,由于匿名类就是一个子类,由于无名可用,所以不可能用匿名类声明对象,但却可以直接用匿名类创建一无名可用,所以不可能用匿名类声明对象,但却可以直接用匿名类创建一个对象。假设个对象。假设Hello是类,那么下列代码就是用是类,那么下列代码就是用Hello的一个子类(匿名类)的一个子类(匿名类)创
7、建对象:创建对象:new Hello()new Hello()匿名类的类体匿名类的类体 匿名类可以继承类的方法也可以重写类的方法。我们使用匿名类时,匿名类可以继承类的方法也可以重写类的方法。我们使用匿名类时,必然是在某个类中直接用匿名类创建对象,因此匿名类一定是内部类,匿必然是在某个类中直接用匿名类创建对象,因此匿名类一定是内部类,匿名类可以访问外嵌类中的成员变量和方法,匿名类不可以声明名类可以访问外嵌类中的成员变量和方法,匿名类不可以声明staticstatic成员成员变量和变量和staticstatic方法。匿名类的主要用途就是向方法的参数传值。方法。匿名类的主要用途就是向方法的参数传值。
8、下面的下面的例例子子展示了匿名类的用法。展示了匿名类的用法。6三、匿名类三、匿名类 2 2和接口有关的匿名类和接口有关的匿名类 假设假设ComputableComputable是一个接口,那么,是一个接口,那么,JavaJava允许直接用接口名和一个允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了类体创建一个匿名对象,此类体被认为是实现了ComputableComputable接口的类去接口的类去掉类声明后的类体,称作匿名类。下列代码就是用实现了掉类声明后的类体,称作匿名类。下列代码就是用实现了ComputableComputable接接口的类(匿名类)创建对象:口的类(匿名类)创建对象:new Computable()new Computable()实现接口的匿名类的类体实现接口的匿名类的类体 如果某个方法的参数是接口类型,那么我们可以使用接口名和类如果某个方法的参数是接口类型,那么我们可以使用接口名和类体组合创建一个匿名对象传递给方法的参数,类体必须要实现接口中的体组合创建一个匿名对象传递给方法的参数,类体必须要实现接口中的全部方法。全部方法。