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

下载本文档

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

文档简介

1、Java275 认识Java,第四章 面向对象高级特性,学时:8学时 教学方法:讲授ppt上机练习,目标: Java中的静态,类的继承,封装,多态,方法的重载与覆盖。抽象类及接口的概念与使用。Java中的包及类路径。引用数据类型的转换。包装类及内部类。访问权限修饰符的使用。 final关键字。,本章要点,static的含义 继承的规则 子类实例化的过程 方法的覆盖 final关键字 抽象类的特性 接口的规范 数据类型的转换 包和访问权限修饰符 包装类和内部类,类的继承,格式: Java中只能单继承,也就是说每个类只能有一个父类。,修饰符 class 子类名 extends 父类名,生物,植物,

2、动物,人类,猫类,类的继承(续),父类的别名: 基类BaseClass 超类SuperClass 子类的别名: 衍生类 Child Class Derived Class,类继承的规则,子类继承父类的所有属性和所有方法; 但是构造器不继承;,Vehicle,type topSpeed,start() stop(),MotorVehicle,type topSpeed cylinders,start() stop(),Car,type topSpeed cylinders,start() stop() squealTires(),Boat,type topSpeed cylinders,star

3、t() stop() sinkBoat(),子类实例化的过程,子类实例化是先实例化其父类,然后实例化子类。 要先调用父类的构造器,父类构造器运行完毕,才调用子类的构造器。 如果实例化类D,说出构造器执行的顺序。,A,B,C,D,E,super和this关键字,super() 作用:调用父类的构造器 只能出现在子类的构造器中,且必须是第一行 super()中的参数,决定了调用父类哪个构造器 如果子类构造器中没有出现super,那么默认super(),即调用父类的空构造器。 this() 作用:调用本类的构造器 只能写在构造器的第一行 在同一个构造器中super()和this()不能同时出现,su

4、per和this关键字(续),super. 指向父类的引用。 this. 指向本类的引用。,多态,本质上遵守引用类型的转换规则 分为两种表现形式 赋值多态 传参多态(隐式的赋值多态) 多态的机制 Override,多态,多态(动态绑定、晚绑定 Polymorphism ) 一个对象具有多种特征,根据不同的情况来做出不同的响应 多态存在的三个必要条件 要有继承,或实现 要有重写 父类引用指向子类对象 一旦满足以上3个条件,当调用父类中被重写的方法后,运行时创建的是哪个子类的对象,就调用该子类中重写的那个方法 在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用相应的方法 示例

5、Teacher.java Student.java Person.java SchoolManage.java,多态,多态的优点 简化代码 改善代码的组织性和可读性 易于扩展 练习 Parker.java Vehicle.java Bus.java Truck.java Car.java 在停车场收费系统中,收费者会根据车型的不同收取不同的停车费,其中, 客车:15元/小时 货车:12元/小时 轿车:8元/小时 编写java程序完成此功能,访问权限修饰符,public protected friendly private 封装,Employee,public name public phone

6、 private salary,public sayHello() private writeMail(),Employee,public name public phone,public sayHello(),从类外看,访问权限修饰符(续),位置,权限,访问权限修饰符(续),包,访问权限修饰符(续),静态修饰符static,static可以修饰的元素 属性 共享 方法 访问的方式 块 执行的时机 只能修饰类成员,不能修饰局部变量。 需要注意的问题: 静态方法可以直接访问静态变量,如要访问非静态变量必须先实例化。 静态方法中不能this。 静态方法不能被非静态方法覆盖。,静态属性,所有对象共享

7、 也称为类变量 两种方式访问: 类名.属性; 对象名.属性;,0 x8000,0 x3000,200,Circle p,0 x3000,radius,100,radius,Circle q,0 x8000,3.14,pi,静态存储区,静态方法,不需要实例化,可以直接访问; 也称为类方法 两种方式访问: 直接访问:类名.方法名(); 实例化后访问:对象名.方法名(); 作用: 简化方法的使用; 便于访问静态属性; 限制: 静态方法只能直接访问静态成员。静态方法中不能this; 静态方法不能被非静态方法覆盖;,特殊的静态方法main,必须public权限修饰符 必须static静态修饰符 必须返回

8、空值void main函数名不可改变 String args命令行参数,变量初始化的顺序,隐式赋予变量默认值; 显式赋予初始值; 构造方法体赋予新值;,程序块,静态程序块 非静态程序块,关键字final,final可以修饰的元素: 变量(属性和局部变量和形参):不能被重新赋值 在声明的同时赋值 方法:不能被覆盖,即不能修改。 类:不能被继承 注: final类型的属性比较特殊,可以在声明的同时赋值,还可以在构造器中赋值,在其他的方法中不能够赋值。,常量定义的一般格式,常量一般定义成下面的形式: public static final double PI=3.14; 首先: 一般把它设置为静态s

9、tatic,多个实例共享该常量,没有必要每个对象保存一份; 其次: 设置为final类型,赋值以后不能再改变; 第三: 注意遵守常量命名规范,所有字母大写,单词之间使用下划线,如MAX_VALUES。,抽象方法,只有方法声明,没有方法实现的方法; 抽象方法用abstract声明,以“;”结尾。,public abstract void getArea();,抽象类,含有抽象方法的类必须声明为抽象类; 用abstract声明class。,public abstract class Rectangle public abstract void getArea(); ,抽象类的规则,注意: 抽象类不

10、能被实例化; 其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract; 抽象方法不能为static; 在下列情况下,一个类必须声明为抽象类: 当一个类的一个或多个方法是抽象方法时; 当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分; 当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;,抽象类的思考,抽象类是否能够实例化? 抽象类是否需要构造器?,抽象类的本质,抽象类是抽象方法和非抽象方法的集合 特殊情况 全部是抽象方法 全部为非抽象方法 实际上是一套规范,接口interface,接口不是一个类,不能实例化; 接口是常量和抽象方法的集合; 接口对类

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

12、中定义的方法全部都是抽象方法,即只提供方法的定义,而没有提供方法的具体实现的语句。 接口采用多继承机制,而不像类一样采用单继承机制。 接口默认: 常量:public static final 抽象方法: public abstract,接口与抽象类的区别,接口不能含有任何非抽象方法,而抽象类可以。 类可以实现许多接口,但只能有一个父类。 接口不是类分级结构的一部分,没有联系的类可以实现相同的接口。,类的继承,interface,implements,class A implements C, D ,class,class,class A extends B ,interface,class,i

13、mplements,class A implements C ,class,class,class A extends B implements C ,implements,interface,implements,interface,class A extends B implements C, D ,抽象类的继承,class,abstract class,class A extends B ,abstract class,abstract class A extends B ,abstract class,implements,interface,abstract class A impl

14、ements C, D ,implements,interface,abstract class A implements C ,abstract class,interface,abstract class A extends B implements C, D ,interface,implements,接口的继承,interface A extends B ,interface,interface,interface,interface A extends B, C, D ,interface,访问接口中常量,public static final int MAX_SPEED=100;

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

16、lass object instanceof interface 返回值都是boolean,内部类的定义及特点,内部类就是定义在另一个类内部的类。 内部类对于同一包中的其它类来说,内部类能够隐藏起来。,内部类和外部类之间的访问,无需创建外部类的对象,即可从内部类访问外部类的变量和方法。 必须创建内部类的对象,否则无法从外部类访问内部类的变量和方法。 如果内部类中有和外部类同名的变量或方法,则内部类的变量和方法将获得比外部类的变量和方法更高的优先级。 不能定义static变量,从其他类访问内部类,在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

提交评论