《Java与面向对象程序》-4.3抽象类和接口_第1页
《Java与面向对象程序》-4.3抽象类和接口_第2页
《Java与面向对象程序》-4.3抽象类和接口_第3页
《Java与面向对象程序》-4.3抽象类和接口_第4页
《Java与面向对象程序》-4.3抽象类和接口_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学习目标掌握抽象类的定义、特点及其使用方法,掌握接口的定义、特点及其使用方法主要内容抽象类接口案例:图形计算程序设计1.抽象类当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但是有时这些方法的实现方式是无法确定的。例如前面定义的Person类,work()方法用于表示人的工作,对于不同职业的人工作是不同的,因此work()方法无法准确的描述人的工作。针对上面描述的情况,Java允许在定义方法时不写方法体,将该方法定义成抽象方法。1.抽象类使用abstract关键字修饰的方法为抽象方法,抽象方法是一种不完整的方法,抽象方法只有一个声明,没有方法的主体,也就是方法没有具体的实现,下面是抽象方法的定义示例:当一个类被abstract修饰时,该类称之为抽象类。所以定义一个抽象类只需在类前加上abstract修饰即可,定义抽象类示例如下:abstractvoidwork();//定义抽象方法work()//定义抽象类abstractclassPerson{ abstractvoidwork();//定义抽象方法work()}1.抽象类抽象类和抽象方法具有如下特点:(1)使用abstract关键字修饰的类为抽象类;(2)含有抽象方法的类必须声明为抽象类;(3)抽象类中可以没有抽象方法,在定义抽象类时,虽然类被abstract关键字修饰,但是可以不为这抽象类添加抽象方法;1.抽象类抽象类和抽象方法具有如下特点(续):(4)抽象类不能够被实例化,当一个类被定义成抽象类后,不能使用new关键字创建该类的对象,否则会出现编译错误;(5)当使用abstract关键字修饰类时,表明这个类只能被继承;当abstract修饰方法时,表明这个方法必须由子类提供实现(重写)。而final修饰的类不能够被继承,final修饰的方法不能被重写,所以abstract关键字与final关键字不能同时使用;1.抽象类抽象类是用来被继承的,继承抽象类的子类有两个选择:部分实现或完全不实现父类的抽象方法,但此时子类必须声明为抽象类。实现父类所有的抽象方法,此时子类不必声明为抽象类。1.抽象类【例4-9】抽象类和抽象方法使用1.抽象类抽象类不能创建实例,只能当成父类来继承。从语意角度来说,抽象类是从多个具体的类中抽象出来的父类,具有更高层次的抽象。抽象类体现的就是一种模板模式设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造。2.接口抽象类是从多个类中抽象出来的模板,而接口的概念则是更深一层的抽象,我们可将其想象为一个“纯”的抽象类。简单理解,可以把接口当成一种约定或行为规范,实现接口的类在形式上都要遵循这个约定或规范。定义接口时,需要使用interface关键字来定义,具体结构如下:例如:[访问控制符]interface<接口名>{类型标识符

final符号常量名

=常数;返回值类型方法名([参数列表]);…}interfaceIAnimal{ intID=1;//定义全局变量 voidrun();//定义抽象方法}2.接口接口是抽象方法和常量值的集合,从本质上讲接口是一个特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。在上面的例子中,并没有对run()方法使用abstract修饰,因为接口中定义的方法和变量都包含一些默认的修饰符。接口中定义的方法默认是用“publicabstract”修饰,代表方法为抽象方法。接口中的变量默认使用“publicstaticfinal”修饰,代表常量。因此,可以说接口中只有常量和抽象方法。2.接口在以前的知识中我们知道,Java只支持单继承,但是在实际的生活中多继承是事实存在的,我们经常都需要表达这样一个意思:“x从属于a,也从属于b,也从属于c”,如果使用单继承是不能完成上述表述,接口的多重实现则解决了这个问题。在Java中,接口是可以多重实现的,这与单继承有着本质的区别,接口的多重实现也可以说解决了单继承带来的不便,需要注意的是类实现了接口就要实现接口中所有方法,否则该类需定义为抽象类。实现接口的语法结构如下:class[类名]implements接口名称[,其他接口,…]2.接口【例4-10】接口的多重实现运行结果2.接口跟抽象类相同接口不能用于创建实例,接口自然就没有自己的构造方法。接口虽然不能实例化,但是接口可以声明引用类型变量,当使用接口声明引用类型变量时,这个引用变量必须“指向”实现该接口的某类的对象,这就是后面要讲的多态的概念。从上述实例中可以看出,类和接口的关系是实现(implements)关系并可以多重实现,另外,在Java中接口是可以继承接口的,也就是说允许一个接口继承(extends)另外一个接口。2.接口接口的继承和类的继承不一样,接口完全支持多继承,即一个接口可以有多个直接的接口。与类的继承类似,子接口扩展某个父接口之后,将会获得父接口的所有常量和抽象方法。一个接口继承多个父接口时,多个父接口排在extends关键字之后,多个父接口之间用逗号(,)隔开。例如下面的例子:publicclassinterfaceExtends{ publicstaticvoidmain(String[]args){ System.out.println(interfaceC.A); System.out.println(interfaceC.B); System.out.println(interfaceC.C); }}interfaceinterfaceA{ intA=5; voidfunA();}interfaceinterfaceB{ intB=6; voidfunB();}interfaceinterfaceCextendsinterfaceA,interfaceB{ intC=7; voidfunC();}2.接口在Java中,类同时继承父类和实现接口是允许的,如果一个类既要继承父类,又要实现某接口,那么在编写格式上要先继承(extends)父类,再实现接口(implements),否则会出现编译错误。例如下面例子Panda类即继承了Animal类又实现了Valuable接口,下面写法是合法的:classPandaextendsAnimalimplementsValuable{

程序代码......}2.接口接口的特点:(1)接口中的成员变量默认都是publicstaticfinal类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量;(2)接口中的方法默认都是publicabstract类型的(都可省略),没有方法体;(3)接口中只能包含publicstaticfinal类型的成员变量和publicabstract类型的成员方法,也就是说接口中的方法都是抽象方法,接口中的变量都是常量;(4)接口中没有构造方法,接口不能被实例化;(5)一个接口不能实现(implements)另一个接口,但它可以继承(extends)多个其它的接口;2.接口接口的特点(续):(6)Java接口必须通过类来实现它的抽象方法;(7)当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类;(8)一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承;(9)如果一个类既要继承父类,又要实现某接口,那么在编写格式上要先继承(extends)父类,再实现接口(implements)案例4-1图形计算程序设计案例描述设计一个几何图形接口Shape,在接口中规范几何图形求周长、求面积的方法;定义长方形类Rectangle和圆形类Circle实现Shape接口;在图形计算程序中创建具体的长方形和圆形对象,然后调用统一的方法求该图形的周长、面积,并输出。程序的运行结果如下图所示:案例4-1图形计算程序设计实现思路设计Shape接口,代表几何图形,并用来规范几何图形的计算规范。在接口中,通过抽象方法来规范求几何图形面积和周长的功能;设计Rectangle长方形类,该类要实现Shape接口;添加私有属性length和width,分别代表长方形的长和宽,并向外界提供操作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论