JavaOO-08.面向对象高级特性.ppt
《JavaOO-08.面向对象高级特性.ppt》由会员分享,可在线阅读,更多相关《JavaOO-08.面向对象高级特性.ppt(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、IT Education&TrainingCopyright2007版权所有东软培训IT Education&Training第八章面向对象高级特性IT Education&Training本章要点lstatic的含义l继承的规则l子类实例化的过程l方法的覆盖lfinal关键字l抽象类的特性l接口的规范l数据类型的转换l包和访问权限修饰符l包装类和内部类IT Education&Training静态修饰符staticlstatic可以修饰的元素属性共享;分配在静态存储区,而不是分配在堆内存中。静态属性描述了该类的所有对象的共同特征,而非静态属性描述的是每个对象独有的特征,静态属性可以不用实例化
2、,可以直接访问。因为访问的都是同一块内存,所以变量的值是一样的。静态属性在该类第一次被加载到JVM时,分配了静态存储区,以后每次运行不再分配空间,仍然使用以前的空间。直到JVM停止之前,静态存储区的变量一直存在,不会失效。方法访问的方式块执行的时机只能修饰类成员,不能修饰局部变量只能修饰类成员,不能修饰局部变量。l需要注意的问题:静态方法可以直接访问静态变量,如要访问非静态变量必须先实例化。静态方法中不能this。静态方法不能被非静态方法覆盖。IT Education&Training静态属性l所有对象共享也称为类变量l两种方式访问:类名.属性;对象名.属性;0 x80000 x3000200
3、Circlep0 x3000radius100radiusCircleq0 x80003.14pi静态存储区IT Education&Training静态方法l不需要实例化,可以直接访问;也称为类方法因为该方法对于类的所有对象来说已经是共享的了。l两种方式访问:直接访问:类名.方法名();实例化后访问:对象名.方法名();l作用:简化方法的使用;比如Math类中的所有方法都是静态的。便于访问静态属性;常提供静态方法访问静态属性。l限制:静态方法只能直接访问静态成员(静态属性、静态方法)。因为静态方法在实例化之前就可以被类调用,而此时非静态成员还不存在。静态方法中不能用this;静态方法不能被非
4、静态方法覆盖;IT Education&Training特殊的静态方法mainl在类中有一个我们经常使用的静态方法main(),它是程序执行的入口。一般来说,在一个项目中应该有一个类提供了main函数,整个项目从这个main方法开始运行。l该方法的格式是固定的,除了括号中的形参名称可以改变,别的都不能改变l必须public权限修饰符:保证在任何位置都可以访问它。l必须static静态修饰符:无需实例化,可以直接调用。l必须返回空值void:main方法仅是程序的启动没必要返回任何值。lmain函数名不可改变:固定的,注意大小写。lStringargs命令行参数:从程序外部传入的参数。l那么,请
5、思考:主函数会被谁调用呢?IT Education&Training主函数main()l一般运行一段程序都是通过Java解释器的。lD:javacCircle01.java进行编译生成字节码;lD:javaCircle01进行运行;而不是D:javaCirlce01.classlJava解释器是通过类名找到字节码文件的,再找到该字节码文件中的main函数的,然后执行整个程序。lJava要求类名必须和文件名相同也就是这个道理,否则java解释器就找不到字节码文件了。Java解释器在调用main方法时,直接通过类名调用这个静态方法,没有必要先实例化类再通过对象来调用。这样不仅减少程序执行的步骤,还
6、保证程序运行的效率。可以明白,main函数的static修饰符是非常重要的。IT Education&Training变量初始化的顺序1.隐式赋予变量默认值;2.显式赋予初始值;3.构造方法体赋予新值;4.注意:可能有的程序第2、3赋值步骤不存在,但是必定有第1个步骤。5.见示例PersonVariableOrder.javal每实例化一个对象,属性在堆内存中的值,就是如上这3个步骤的结果。所以对于非静态属性,每次实例化时都要按以上步骤赋值。l静态的属性就不同,因为它是类属性,不属于任何对象,也可以说它被所有对象共享。它在第一次装载到JVM时被赋值,对象实例化时不需要给静态属性赋值。l总之,静
7、态属性的赋值要优先于非静态属性的赋值。而且,静态属性的赋值只有一次,非静态属性的赋值要发生多次。IT Education&Training程序块l静态程序块l非静态程序块IT Education&Training类的继承Inheritancel格式:lJava中只能单继承,也就是说每个类只能有一个父类。修饰符class子类名extends父类名生物植物动物人类猫类IT Education&Training继承续l子类实际上继承了父类的所有特征,同时子类在父类的基础上还增加了自己的特征。所以,子类和父类相比具有更丰富的功能。l其实,在继承关系中我们还能发现一个规律:子类是父类的一种,也可以说“子
8、类就是父类”。如:人类就是动物,动物就是生物。记住这个定律对我们理解继承的概念非常有帮助。但是,反过来看,父类是子类的说法正确吗?l见示例Person.java、Student.javaIT Education&Training类的继承(续)l父类的别名:基类BaseClass超类SuperClassl子类的别名:衍生类ChildClassDerivedClassIT Education&Training类继承的规则l子类继承父类的所有属性和所有方法;l但是构造器不继承但是构造器不继承;VehicletypetopSpeedstart()stop()MotorVehicletypetopSpe
9、edcylindersstart()stop()CartypetopSpeedcylindersstart()stop()squeal()BoattypetopSpeedcylindersstart()stop()sinkBoat()IT Education&Training子类实例化的过程l子类实例化是先实例化其父类,然后实例化子类。l要先调用父类的构造器,父类构造器运行完毕,才调用子类的构造器。l如果实例化类D,说出构造器执行的顺序。l总之,一个类的实例化不仅要调用本类的构造器,还要调用它所有父类的构造器,先完成父类构造器中的代码,最后完成本类构造器中的代码。ABCDEIT Educati
10、on&Trainingsuper和this关键字l如果父类Person具有多个构造器重载,那么子类Student实例化时如何选择调用父类的构造器呢?lsuper()作用:调用父类的构造器只能出现在子类的构造器中,且必须是第一行只能出现在子类的构造器中,且必须是第一行super()中的参数参数,决定了调用父类哪个构造器如果子类构造器中没有出现super,那么默认super(),即调用父类的空构造器空构造器。lthis()作用:调用本类的构造器只能写在构造器的第一行l在同一个构造器中在同一个构造器中super()和和this()不能同时出现不能同时出现IT Education&Trainingsu
11、per和this关键字(续)lsuper.指向父类的引用。通过关键字super我们可以指定子类在构造时调用父类的哪个构造器,达到先实例化父类然后实例化子类的目的。子类的构造器默认的调用父类无参构造器,即子类构造器中没有用super指明调用父类哪个构造器的话,实际上编译器会自动的在子类构造器第一行加入代码super();lthis.我们知道子类在实例化时必须调用父类的构造,实际上有的子类构造也可以先调用本类的其他构造,然后在通过那个构造调用父类的构造无论是调用父类的构造还是子类的构造,最终都是找到最顶级的父类自上而下的实例化。只要中间环节有一个构造没找到,这个子类就无法完成实例化。见示例!指向本
12、类的引用。IT Education&Training方法的覆盖l所谓“覆盖(override)”是在声明子类的成员方法时,其名称和参数都与父类的成员方法的名称和参数一样,在面向对象的程序设计中称为方法的覆盖。IT Education&Training方法覆盖的规则1.在父子类之间继承时发生2.多个方法的名称相同3.返回值类型必须相同4.每个方法参数数量和参数类型和顺序相同5.权限修饰符要求:子类方法的要不小于要不小于父类方法的6.子类方法只能抛出父类方法异常或其异常的子类。7.方法覆盖如下例所示:父类方法:protectedvoidgetArea(intw,inth)throwsIOExcep
13、tion;子类方法:publicvoidgetArea(intx,inty)throwsFileNotFoundException;IT Education&Training关键字finallfinal可以修饰的元素:变量(属性和局部变量):不能被重新赋值;可以在声明的同时赋值可以在声明的同时赋值,还可以在构造在构造器中赋值器中赋值,其他的方法中不能够赋值。在程序中经常使用的一些常量,如圆周率,没必要在程序中频繁的修改它那么我们可以:首先把它设置为静态static,多个实例共享该常量,没有必要每个对象保存一份;其次,设置为final类型,赋值以后不能再改变;最后注意遵守常量命名规范,所有字母大
14、写、单词之间用下划线。方法:不能被子类覆盖、重写,即不能修改。类:不能被继承、不能产生子类。IT Education&Training抽象方法l只有方法声明,没有方法实现的方法;l抽象方法必须用abstract声明,没有方法体,以“;”结尾。publicabstractvoidgetArea();IT Education&Training抽象类l含有抽象方法的类必须声明为抽象类;l用abstract声明class。publicabstractclassRectanglepublicabstractvoidgetArea();IT Education&Training抽象类的规则l注意:抽象类不
15、能被实例化;因为即使实例化以后我们也无法调用对象的抽象方法。所以抽象类只能作为父类使用,让其他类继承抽象类。其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;抽象方法不能为抽象方法不能为static;l在下列情况下,一个类必须声明为抽象类:当一个类的一个或多个方法是抽象方法时;当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;IT Education&Training抽象类的思考l抽象类是否能够实例化?l抽象类是否需要构造器?IT Education&Training抽象类的本质l抽象类是抽
16、象方法和非抽象方法的集合l特殊情况全部是抽象方法全部为非抽象方法l实际上是一套规范,它规定了子类必须定义的方法,除非子类严格的执行了这套规范,否则这个子类将不能实例化和使用。IT Education&Training接口interfacel接口不是一个类,不能实例化;l接口是常量和抽象方法的集合;l接口对类来说是一套规范,是一套行为协议;l定义格式如下:publicinterfaceMyInterfaceinterfaceBodyIT Education&Training类实现接口l接口实质上就是一个常量和抽象方法的集合。为了使用一个接口,你要编写实现接口的类。l如果一个类要实现一个接口,那么
17、这个类就必须实现接口中所有抽象方法。否则这个类只能声明为抽象。l格式如下:publicclassMyClassimplementsMyInterface/实现接口中所有抽象方法IT Education&Training接口的特点l接口使用interface关键字来定义,而不是class。l接口中定义的变量都是公共静态最终变量。l接口中没有自己的构造函数,而且接口中定义的方法全部都是抽象方法,即只提供方法的定义,而没有提供方法的具体实现的语句。l接口采用多继承机制,而不像类一样采用单继承机制。如果在实现某个接口的同时还继承了某个类,那么,extends要写在implements之前。l接口默认:
18、常量:publicstaticfinal抽象方法:publicabstractIT Education&Training接口与抽象类的区别l接口不能含有任何非抽象方法,而抽象类可以。l类可以实现许多接口,但只能有一个父类。l接口和接口之间可以多继承如:publicinterfaceAextendsB,CB,C也是接口.l接口不是类分级结构的一部分,没有联系的类可以实现相同的接口。l抽象类可以理解为抽象方法和非抽象方法的混合体,而接口中的方法完全是抽象方法,是一套纯粹的规范。一般来说,有关系的类才能继承同一个抽象类,而无关的类不可能有同一个抽象父类,但是无关的类可以实现同一个接口。IT Educ
19、ation&Training类的继承interfaceimplementsclass A implements C,D classclassextendsclass A extends B interfaceclassimplementsclass A implements C classclassextendsclass A extends B implements C implementsinterfaceimplementsinterfaceclass A extends B implements C,D IT Education&Training抽象类的继承classabstractc
20、lassextendsclass A extends B abstractclassextendsabstract class A extends B abstractclassimplementsinterfaceabstract class A implements C,D implementsinterfaceabstract class A implements C abstractclassinterfaceimplementsabstract class A extends B implements C,D interfaceimplementsIT Education&Train
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaOO 08. 面向 对象 高级 特性
限制150内