资源描述
2006,1,Java程序设计基础专业教程理论讲解部分Ver3.1,2006,2,课程概述,抽象类和接口内部类,重点,抽象类和接口,难点,内部类,学习目标,掌握Java面向对象程序设计,2006,3,4.9抽象类和接口,4.9.1抽象类,一个类声明了方法的存在而不是实现,以及带有对已知行为的方法的实现。这样的类通常被称做抽象类(abstractclass)。通过用关键字abstract进行标记声明一个抽象类。,2006,4,4.9抽象类和接口,4.9.1抽象类,抽象方法的格式:,abstractclassShapeabstractfloatarea();,abstractreturnTypeabstractMethod(paramlist);,例如:,2006,5,4.9抽象类和接口,4.9.1抽象类,抽象类必须被继承,抽象方法必须被重写。,classRectangleextendsShapepublicfloatwidth,height;Rectangle(floatw,floath)width=w;height=h;publicfloatarea()returnwidth*height;,classCircleextendsShapepublicfloatr;Circle(floatr)this.r=r;publicfloatarea()return3.14*r*r;,2006,6,4.9抽象类和接口,4.9.2接口,接口是类似于类的一种结构。可以把接口看成是由常量和抽象方法组成的特殊类。(接口特别像纯粹的抽象类)接口是对C+的多重继承性的替代,即接口是用来实现类间多重继承功能的结构。Java语言规定:一个类只能继承一个父类。通过实现接口,某个类可以拥有多个父接口。,2006,7,4.9抽象类和接口,4.9.2接口,接口的定义格式:,publicinterfaceinterfaceNameextendslistOfSuperInterface,接口体包括常量定义和方法定义。,2006,8,4.9抽象类和接口,4.9.2接口,常量定义格式为:,typeNAME=value;,其自动具有public,final,static的属性,所以写成如下格式是一样的:,publicstaticfinaltypeNAME=value;,2006,9,4.9抽象类和接口,4.9.2接口,方法定义格式为:,returnTypemethodName(paramlist);,其自动具有public和abstract属性,所以写成如下格式也是一样的:,publicabstractreturnTypemethodName(paramlist);,2006,10,4.9抽象类和接口,4.9.2接口,定义接口的特点:,定义的方法没有方法体.它们本质上是抽象方法,每个实现接口的类必须实现所有的方法。接口中可以声明变量,它们是,publicfinal和static型。如果一个类实现了一个接口,但是不完全实现接口定义的方法,那么该类必须定义成abstract型。,2006,11,4.9抽象类和接口,4.9.2接口,定义接口的特点:,接口用于定义几个类具有的但又不是在这些类中定义的功能。接口定义的仅仅是实现某一特定功能的对外接口和规范,并没有真正地实现这个功能。接口中定义的各种功能的实现是在“继承”这个接口的各个类中完成的,即由这些类来具体定义接口中各抽象方法的方法体。,2006,12,4.10内部类,4.10.1内部类的定义和使用,内部类(InnerClass)是在一个类的内部嵌套定义的类。它可以是其它类的成员,也可以在一个语句块的内部定义,还可以在表达式内部匿名定义。,内部类允许一个类定义被放到另一个类定义里。内部类是一个有用的特征,因为它们允许将逻辑上同属性的类组合到一起,并在另一个类中控制一个类的可视性。,2006,13,4.10内部类,4.10.1内部类的定义和使用,内部类有如下特性:,(1)一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。名字不能与包含它的类名相同。(2)可以使用包含它的类的静态和实例成员变量,也可以使用它所在方法的局部变量。(3)可以定义为abstract。(4)可以声明为private或protected。(5)若被声明为static,就变成了顶层类,不能再使用局部变量。(6)若想在InnerClass中声明任何static成员,则该InnerClass必须声明为static。,2006,14,4.10内部类,4.10.2匿名内部类,匿名类是一种特殊的没有类名的内部类,它是在一个表达式内部包含一个完整的类定义。由于构造器必须同类名相同,而匿名类没有名字,所以匿名类不能有构造器。,2006,15,4.10内部类,4.10.2匿名内部类,匿名内部类的语法格式如下:,newSuperType(constructionparameters)methodsanddata,如果内部类实现的是接口,则语法格式为:,newInterfaceType()methodsanddata,2006,16,4.10内部类,4.10.2匿名内部类,内部类的语法确实比较混乱和难以理解,虽然带来代码量的减少,但确使代码的易读性大大降低。就总体而言,Java语法比C+语法有了巨大的提升,而匿名内部类却成为一个例外。内部类使用的取舍,主要取决于程序工程的需求。,2006,17,本课小结,抽象类和接口的概念和用法内部类的使用方法,2006,18,小测验,单选题1下列说法正确的是()A.抽象方法一定在抽象类中B.抽象方法一定在接口中C.抽象方法可以在抽象类中也可以在接口中D.抽象方法可以在任何类中出现多选题2下列说法正确的是()A.内部类是定义在同一个源文件中的2个类,他们相互称为内部类B.内部类是定义在一个类的内部的类C.内部类是定义在一个方法内部的类D.内部类是其他类无法访问的类,2006,19,小测验答案,单选题1下列说法正确的是(C)A.抽象方法一定在抽象类中B.抽象方法一定在接口中C.抽象方法可以在抽象类中也可以在接口中D.抽象方法可以在任何类中出现多选题2下列说法正确的是(BC)A.内部类是定义在同一个源文件中的2个类,他们相互称为内部类B.内部类是定义在一个类的内部的类C.内部类是定义在一个方法内部的类D.内部类是其他类无法访问的类,2006,20,课后作业,【作业1】创建一个Player抽象类,其中包含一个增加经验值的抽象方法。,【作业2】自定义一个内部类,熟悉内部类的特点,
展开阅读全文