面向对象高级_第1页
面向对象高级_第2页
面向对象高级_第3页
面向对象高级_第4页
面向对象高级_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、1Java275Java275 认识认识JavaJava第第四四章章 面向对象高级特性面向对象高级特性学时:学时:8 8学时学时教学方法:讲授教学方法:讲授pptppt上机练习上机练习目标目标: : Java中的静态,类的继承,封装中的静态,类的继承,封装,多态,方法的重载与覆盖。抽象类,多态,方法的重载与覆盖。抽象类及接口的概念与使用。及接口的概念与使用。Java中的包及中的包及类路径。引用数据类型的转换。包装类路径。引用数据类型的转换。包装类及内部类。访问权限修饰符的使用类及内部类。访问权限修饰符的使用。 final关键字。关键字。3本章要点本章要点static的含义继承的规则子类实例化的

2、过程方法的覆盖final关键字抽象类的特性接口的规范数据类型的转换包和访问权限修饰符包装类和内部类4类的继承类的继承格式:Java中只能单继承,也就是说每个类只能有一个父类。修饰符修饰符 class 子类名子类名 extends 父类名父类名生物生物植物植物动物动物人类人类猫类猫类5类的继承类的继承(续续)父类的别名:基类BaseClass超类SuperClass子类的别名:衍生类Child ClassDerived Class6类继承的规则类继承的规则子类继承父类的所有属性和所有方法;但是构造器不继承;VehicletypetopSpeedstart()stop()MotorVehiclet

3、ypetopSpeedcylindersstart()stop()CartypetopSpeedcylindersstart()stop()squealTires()BoattypetopSpeedcylindersstart()stop()sinkBoat()7子类实例化的过程子类实例化的过程子类实例化是先实例化其父类,然后实例化子类。要先调用父类的构造器,父类构造器运行完毕,才调用子类的构造器。如果实例化类D,说出构造器执行的顺序。ABCDE8super和和this关键字关键字super()作用:调用父类的构造器只能出现在子类的构造器中,且必须是第一行super()中的参数,决定了调用父类

4、哪个构造器如果子类构造器中没有出现super,那么默认super(),即调用父类的空构造器。this()作用:调用本类的构造器只能写在构造器的第一行在同一个构造器中super()和this()不能同时出现9super和和this关键字关键字(续续)super.指向父类的引用。this.指向本类的引用。10多态多态本质上遵守引用类型的转换规则分为两种表现形式赋值多态传参多态(隐式的赋值多态)多态的机制Override11多态多态多态(动态绑定、晚绑定多态(动态绑定、晚绑定 Polymorphism )一个对象具有多种特征,根据不同的情况来做出不同的响应多态存在的三个必要条件要有继承,或实现要有重

5、写父类引用指向子类对象 一旦满足以上3个条件,当调用父类中被重写的方法后,运行时创建的是哪个子类的对象,就调用该子类中重写的那个方法在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用相应的方法 示例 Teacher.java Student.java Person.java SchoolManage.java12多态多态多态的优点多态的优点简化代码改善代码的组织性和可读性易于扩展 练习 Parker.java Vehicle.java Bus.java Truck.java Car.java在停车场收费系统中,收费者会根据车型的不同收取不同的停车费,其中,客车:15元/小时

6、货车:12元/小时轿车:8元/小时编写java程序完成此功能13访问权限修饰符访问权限修饰符public protected friendly private封装Employeepublic namepublic phoneprivate salarypublic sayHello()private writeMail()Employeepublic namepublic phonepublic sayHello()访问权限修饰符访问权限修饰符(续续) privatefriendlyprotectedpublic类内部同包无继承关系类同包子类不同包子类不同包无继承关系类位置位置权限权限15访问

7、权限修饰符访问权限修饰符(续续)Sample包包CBEDFA访问权限修饰符访问权限修饰符(续续)Sample类A类B类C类D类E类Fprivatexxxxxxfriendlyxxxprotectedxxpublic17静态修饰符静态修饰符staticstatic可以修饰的元素属性 共享方法 访问的方式块 执行的时机只能修饰类成员,不能修饰局部变量。需要注意的问题:静态方法可以直接访问静态变量,如要访问非静态变量必须先实例化。静态方法中不能this。静态方法不能被非静态方法覆盖。 18静态属性静态属性所有对象共享也称为类变量两种方式访问:类名.属性;对象名.属性;0 x80000 x300020

8、0Circle p0 x3000radius100radiusCircle q0 x80003.14pi静态存储区静态存储区19静态方法静态方法不需要实例化,可以直接访问;也称为类方法两种方式访问:直接访问:类名.方法名();实例化后访问:对象名.方法名();作用:简化方法的使用;便于访问静态属性;限制:静态方法只能直接访问静态成员。静态方法中不能this;静态方法不能被非静态方法覆盖;20特殊的静态方法特殊的静态方法main必须public权限修饰符必须static静态修饰符必须返回空值voidmain函数名不可改变String args命令行参数21变量初始化的顺序变量初始化的顺序隐式赋予

9、变量默认值;显式赋予初始值;构造方法体赋予新值;22程序块程序块静态程序块非静态程序块23关键字关键字finalfinal可以修饰的元素:变量(属性和局部变量和形参):不能被重新赋值在声明的同时赋值方法:不能被覆盖,即不能修改。类:不能被继承注注:final类型的属性比较特殊,可以在声明的同时赋值,还可以在构造器中赋值,在其他的方法中不能够赋值。24常量定义的一般格式常量定义的一般格式常量一般定义成下面的形式:public static final double PI=3.14;首先:一般把它设置为静态static,多个实例共享该常量,没有必要每个对象保存一份;其次:设置为final类型,赋值

10、以后不能再改变;第三:注意遵守常量命名规范,所有字母大写,单词之间使用下划线,如MAX_VALUES。25抽象方法抽象方法只有方法声明,没有方法实现的方法;抽象方法用abstract声明,以“;”结尾。public abstract void getArea();26抽象类抽象类含有抽象方法的类必须声明为抽象类;用abstract声明class。public abstract class Rectangle public abstract void getArea();27抽象类的规则抽象类的规则注意:抽象类不能被实例化;其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstrac

11、t;抽象方法不能为static;在下列情况下,一个类必须声明为抽象类: 当一个类的一个或多个方法是抽象方法时;当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;28抽象类的思考抽象类的思考抽象类是否能够实例化?抽象类是否需要构造器?29抽象类的本质抽象类的本质抽象类是抽象方法和非抽象方法的集合特殊情况全部是抽象方法全部为非抽象方法实际上是一套规范30接口接口interface接口不是一个类,不能实例化;接口是常量和抽象方法的集合;接口对类来说是一套规范,是一套行为协议;定义格式如下:public interface

12、MyInterface interfaceBody 31类实现接口类实现接口接口实质上就是一个常量和抽象方法的集合。为了使用一个接口,你要编写实现接口的类。如果一个类要实现一个接口,那么这个类就必须实现接口中所有抽象方法。否则这个类只能声明为抽象。格式如下:public class MyClass implements MyInterface /实现接口中所有抽象方法实现接口中所有抽象方法 32接口的特点接口的特点接口使用interface关键字来定义,而不是class。接口中定义的变量都是公共静态最终变量。接口中没有自己的构造函数,而且接口中定义的方法全部都是抽象方法,即只提供方法的定义,而

13、没有提供方法的具体实现的语句。接口采用多继承机制,而不像类一样采用单继承机制。接口默认:常量:public static final抽象方法: public abstract33接口与抽象类的区别接口与抽象类的区别接口不能含有任何非抽象方法,而抽象类可以。类可以实现许多接口,但只能有一个父类。接口不是类分级结构的一部分,没有联系的类可以实现相同的接口。34类的继承类的继承interfaceimplementsclass A implements C, D classclass extendsclass A extends B interfaceclassimplementsclass A im

14、plements C classclassextendsclass A extends B implements C implementsinterfaceimplementsinterfaceclass A extends B implements C, D 35抽象类的继承抽象类的继承classabstract classextendsclass A extends B abstract classextendsabstract class A extends B abstract classimplementsinterfaceabstract class A implements C,

15、 D implementsinterfaceabstract class A implements C abstract classinterfaceimplementsabstract class A extends B implements C, D interfaceimplements36接口的继承接口的继承extendsinterface A extends B interfaceinterfaceinterfaceextendsinterface A extends B, C, D interfaceextends37访问接口中常量访问接口中常量public static fina

16、l int MAX_SPEED=100;有三种方式:对象名.MAX_SPEED类名. MAX_SPEED接口名. MAX_SPEED38引用数据类型的转换引用数据类型的转换前提:具有继承关系原则:子类就是父类向上造型:子类转换为父类,自动转换;生物生物植物植物动物动物人类人类猫类猫类向上转型向上转型39引用数据类型的转换引用数据类型的转换(续续)向下造型:强制转换曾经向上转换过的对象,才能再向下转换。向上转换损失了子类新扩展的属性和方法仅剩下父类中声明过的属性和方法Person p = new Student();Student s = (Student)p;40instanceof运算符运算

17、符instanceof运算符的一般格式:object instanceof classobject instanceof interface返回值都是boolean41内部类的定义及特点内部类的定义及特点内部类就是定义在另一个类内部的类。内部类对于同一包中的其它类来说,内部类能够隐藏起来。42内部类和外部类之间的访问内部类和外部类之间的访问无需创建外部类的对象,即可从内部类访问外部类的变量和方法。必须创建内部类的对象,否则无法从外部类访问内部类的变量和方法。如果内部类中有和外部类同名的变量或方法,则内部类的变量和方法将获得比外部类的变量和方法更高的优先级。不能定义static变量43从其他类访问内部类从其他类访问内部类在Outer内访问Inner,只需如下:Inner in=new Inner();在Outer外访问Inner,必须如下:Outer o = new Outer(); /实例化外部类Outer.Inner

温馨提示

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

评论

0/150

提交评论