抽象类和接口演讲_第1页
抽象类和接口演讲_第2页
抽象类和接口演讲_第3页
抽象类和接口演讲_第4页
抽象类和接口演讲_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、一抽象类 二接口三更深层的接口(接口继承和应用)四抽象类跟接口区别五final关键字和总结 有有些情况下些情况下,我们我们希望定义一个类希望定义一个类,该类该类定义了一种给定结构的抽象但是不提供任何完整的定义了一种给定结构的抽象但是不提供任何完整的方法实现方法实现。也就是说。也就是说,创,创建一个只定义一个被它的建一个只定义一个被它的所有子类共享的通用形式,由每个子类自己去填写所有子类共享的通用形式,由每个子类自己去填写细节。这样的类决定了子类所必须实现的方法的本细节。这样的类决定了子类所必须实现的方法的本性性。 可以定义抽象类可以定义抽象类(abstract)实现上述需求。实现上述需求。这就

2、是抽象类由来。这就是抽象类由来。定义抽象类的目的就是为了让别人继承,并按抽象类中定义的方案,来给出具体的设计使用关键字abstract来声明抽象类 abstract class Animal /抽象类 抽象类通常包含0个或多个抽象方法抽象方法表明该抽象类的子类必须提供此方法的具体实现 使用关键字abstract来声明抽象方法 abstract class Animal /抽象类 public abstract void eat(); /抽象方法 1.抽象方法只有方法的声明,没有方法体 2.抽象方法用来描述系统具有什么功能3.具有一个或多个抽象方法的类必须声明为抽象类 抽象类也可以有具体的属性和

3、方法构造方法不能声明为抽象方法 abstract class Animal /抽象类 private String name; /属性 public Animal(String n) /构造方法 name = n; public abstract void eat(); /抽象方法 public String getName() /具体方法 return name; 不能通过new关键字实例化抽象类的对象 Animal animal = new Animal(非非); /错误但可以声明抽象类的引用指向子类的对象,以实现多态性Animal animal = new Dog(非非); /正确ani

4、mal.eat();实例:实例:11.2.1 11.2.1 接口的概念接口的概念接口是抽象方法和常量值的定义的集合。接口是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实中只包含常量和方法的定义,而没有变量和方法的实现。现。当定义一个接口时,实际上是在编写一个契约(当定义一个接口时,实际上是在编写一个契约(合合同同),用来描述实现其的类能够做什么,能够充当什),用来描述实现其的类能够做什么,能够充当什么样的角色。而接口中并没有功能的具体实现,具体么样的角色。而接口中并没有功能

5、的具体实现,具体实现由签了契约的类自己来进行,但实现时必须满足实现由签了契约的类自己来进行,但实现时必须满足接口中的要求。接口中的要求。接口的声明接口的声明 访问控制符访问控制符 interface 接口名称接口名称 public staitc final 常量名;常量名; abstract public 方法名();方法名(); 实现接口的语法实现接口的语法: public 类名类名 implements 接口名接口名 /方法体方法体 说明:说明:接口的访问控制符只能用接口的访问控制符只能用public,用用public定义的接口可以被定义的接口可以被所有的类和包引用,而缺省的则只能所有的类

6、和包引用,而缺省的则只能 被同一个包中的其他类和被同一个包中的其他类和接口引用。接口引用。常量一定要赋值。常量一定要赋值。方法是抽象方法。方法是抽象方法。实现接口的类必须实现接口中定义的所有抽象方法。接口的实实现接口的类必须实现接口中定义的所有抽象方法。接口的实现的类允许包含普通方法。现的类允许包含普通方法。interface IA / 不能有构造器不能有构造器 / 属性必须赋值属性必须赋值 / str省略了省略了public static final String str = Hello; / 方法必须是抽象方法方法必须是抽象方法 void f(); / default : public f

7、inal接口中没有构造方法,不能被实例化。在接口中接口中没有构造方法,不能被实例化。在接口中定义构造方法是非法的:如:定义构造方法是非法的:如: public interface Person Person() /给接口给接口,Person定义构造方法是不合法的定义构造方法是不合法的 实例:实例:定义类实现定义类实现多个多个接口接口语法格式:语法格式: class 类名类名 implements 接口接口1,接口接口2 说明:说明:一个类可以实现多个无关的接口一个类可以实现多个无关的接口(多继承多继承)。用接口来实现用接口来实现多继承并不会增加类关系的复杂度。多继承并不会增加类关系的复杂度。实

8、现接口的类必须要实现接口所有的方法。否则,这个类实现接口的类必须要实现接口所有的方法。否则,这个类必须被定义成抽象类必须被定义成抽象类 如果又要继承类又要继承接口,则使用如下格式:如果又要继承类又要继承接口,则使用如下格式: A extends SuperA implements I1,I2/接口接口Apublic interface A interface B / 接口接口C,继承继承A和和Binterface C extends A, B 一个接口可以继承多个其他接口:一个接口可以继承多个其他接口: /接口接口Apublic interface A interface B / 错误!接口错

9、误!接口C不能实现接口不能实现接口A,Binterface C implements A, B 一个接口不能实现另外一个接口一个接口不能实现另外一个接口 : 接口跟类、抽象类是一个层次的概念,命名规则相同。接口跟类、抽象类是一个层次的概念,命名规则相同。接口接口中可以定义常量,不能定义变量。接口中属性都默认中可以定义常量,不能定义变量。接口中属性都默认用用”public static final”修饰,即接口中的属性都是全修饰,即接口中的属性都是全局静态常量。接口中的常量必须在定义时指定初始值。局静态常量。接口中的常量必须在定义时指定初始值。 public static final int P

10、I=3.14; int PI =3.14;/在接口中,这两个定义语句效在接口中,这两个定义语句效果完全相同果完全相同 int PI; /错误错误接口接口之间可以通过之间可以通过extends 实现继承关系,一个接口可实现继承关系,一个接口可以继承多个接口,但接口不能继承类。以继承多个接口,但接口不能继承类。4类只能继承一个父类,但可以通过类只能继承一个父类,但可以通过implements实现多实现多个接口。一个类必须实现接口的全部方法,否则必须定义个接口。一个类必须实现接口的全部方法,否则必须定义为抽象类。一个类在继承父类的同时又实现了多个接口时,为抽象类。一个类在继承父类的同时又实现了多个接

11、口时,extends必须位于必须位于implements之前。之前。关于定义和实现接口,需要注意以下几个方面内容关于定义和实现接口,需要注意以下几个方面内容:实例:实例:书上愤怒的小鸟。书上愤怒的小鸟。相同点:相同点:都代表系统的抽象层。(接口比抽象类更抽象)都代表系统的抽象层。(接口比抽象类更抽象)都不能被实例化。都不能被实例化。都能包含抽象方法。即都能包含抽象方法。即public abstract定义的方定义的方法。法。定义的抽象方法不能有方法体,不提供现实细节。定义的抽象方法不能有方法体,不提供现实细节。抽象类用于描述继承体系的上层结构抽象类定义的目的就是为了让别人去继承一个抽象类可以有

12、具体属性一个抽象类可以有 0 - * 抽象方法一个抽象类可以有 0 - * 非抽象方法继承一个抽象类,但是没有全部实现抽象类的全部抽象方法,那么也必须声明为抽象类主要区别在抽象类中可以有非抽象方法,而接口中只能包含抽象方法向抽象类中添加一个具体的方法,不会对它的子类造成影响,而对于接口,一旦公布就不应被改变一个类只能继承一个直接的父类,这个父类可能是抽象类;但一个类可以实现多个接口 实例:实例:使用使用final关键字可以声明类、成员变量和成员方关键字可以声明类、成员变量和成员方法,一经声明,便法,一经声明,便不可继承、不可修改和不能覆不可继承、不可修改和不能覆盖盖。final和和abstra

13、ct互相排斥,不能同时使用,前者互相排斥,不能同时使用,前者禁止继承,后者专门用于继承。禁止继承,后者专门用于继承。final变量变量一个变量可以声明为一个变量可以声明为final,这样做的目的,这样做的目的是阻止它的内容被修改。在声明是阻止它的内容被修改。在声明final变量变量的时候必须初始化它。的时候必须初始化它。 对于类中的对于类中的final成员变量,系统不会为其成员变量,系统不会为其赋初始值,而是要求在构造器完成之前必赋初始值,而是要求在构造器完成之前必须显示初始化。须显示初始化。1.用来声明类中的常量用来声明类中的常量public static final String USER

14、_NAME=“admin;2.用来声明方法的常量参数用来声明方法的常量参数在对一些方法声明的时候,为了防止其参数被方法体中的在对一些方法声明的时候,为了防止其参数被方法体中的语句更改,经常将参数声明为语句更改,经常将参数声明为final参数参数 class A public void showMessage(final String userName). 如果在方法体中改变如果在方法体中改变userName参数的值,编译器会报参数的值,编译器会报错错如果引用类型被如果引用类型被final修饰,那么该变量只能始终修饰,那么该变量只能始终引用一个对像,但可以改变被引用对象的内容。引用一个对像,但可

15、以改变被引用对象的内容。 public class Sample int var; public static void main(String args) final Sample s = new Sample(); s.var = 3; / 修改被引用对象的修改被引用对象的var的值的值 s = new Sample(); / 错误错误,不能再指向新的对像不能再指向新的对像 final方法方法在方法前定义在方法前定义final修饰符。声明成修饰符。声明成final的方法不的方法不能被子类重载。能被子类重载。 final不能用于修饰构造方法。不能用于修饰构造方法。private类型的方法。默

16、认为类型的方法。默认为fianl类型。因为类型。因为private定义的方法不能被子类覆盖。定义的方法不能被子类覆盖。class A final void meth() System.out.println(This is a final method.); class B extends A void meth() / ERROR! Cant override. System.out.println(Illegal!); 因为因为meth()被声明成被声明成final,它不能被,它不能被B重载,如果你试图这样做,将会生成一重载,如果你试图这样做,将会生成一个编译时错误。个编译时错误。fina

17、l类类在类声明前加在类声明前加final可以阻止一个类被继承。可以阻止一个类被继承。final类中的所有方法自动地成为类中的所有方法自动地成为final方法。方法。注意:声明一个既是注意:声明一个既是abstract的又是的又是final的类是的类是不合法的,因为抽象类本身是不完整的,它依靠不合法的,因为抽象类本身是不完整的,它依靠它的子类提供完整的实现。它的子类提供完整的实现。抽象类及抽象方法不能被抽象类及抽象方法不能被final修饰修饰 / 不能同时使用不能同时使用final和和abstract修饰类修饰类public final abstract class Base / 不能同时使用不能同时使用final和和abstract修饰方法修饰方法 abstract final void aa();因为,被因为,被final修饰的类,不能被子类继承,而抽象类,又是专门用于修饰的类,不能被子类继承,而抽象类,又是专门用于继承的,所以两者矛盾,不能同时使用。继承的,所以两者矛盾,不能同时使用。final的作用的作用1) 提高程序的安全性,禁止非法修改固定取值的提高程序的安全性,禁止非法修改固定取值的数据。数据。2)提高代码的

温馨提示

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

评论

0/150

提交评论