[工学]Part03-Java面向对象编程高级篇.ppt_第1页
[工学]Part03-Java面向对象编程高级篇.ppt_第2页
[工学]Part03-Java面向对象编程高级篇.ppt_第3页
[工学]Part03-Java面向对象编程高级篇.ppt_第4页
[工学]Part03-Java面向对象编程高级篇.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

Java程序设计,第三部分 面向对象程序设计高级篇,学习目标,理解类继承的概念以及父类和子类的关系 理解super关键字 掌握方法覆盖、多态性、动态绑定和对象的强制类型转换 理解数据字段和静态方法的隐藏 掌握修饰符:protected、final 设计和使用抽象类 掌握接口的声明和实现,Employee和Manager,public class Employee public String name; public double salary; public Date birthDate; public String getDetails() . ,public class Manager public String name; public double salary; public Date birthDate; public String department; public String getDetails() . ,继承,public class Employee public String name; public double salary; public Date birthDate; public String getDetails() . ,public class Manager extends Employee public String department; ,父类和子类,语法 class ClassName extends Superclass class body 如果class C1 extends C2,则称C1为子类(subclass),C2为父类(superclass)。 子类继承了父类中可访问的数据和方法,子类也可添加新的数据和方法, 子类不继承父类的构造函数。 一个类只能有一个直接父类。,例 几何对象类,编写程序,父类GeometricObject,两个子类Circle和Rectangle。,Example:Circle.java, Rectangle.java, TestCircleRectangle.java,super关键字,调用父类的构造函数 super(parametersopt)调用父类的的构造函数。 必须是子类构造函数的第一条语句。 如果子类中没有显式地调用父类的构造函数,那么将自动调用父类不带参数的构造函数。 父类的构造函数在子类构造函数之前执行。 调用父类的成员 super.data super.method(parameters),方法覆盖,如果子类重新定义了从父类中继承的实例方法,称为方法覆盖(method override)。 仅当方法是可访问的实例方法时,才能被覆盖,即私有方法不能被覆盖。 静态方法不能被覆盖,如果静态方法在子类中重新定义,那么父类方法将被隐藏。 一旦父类中的方法被覆盖,则不能从子类外部访问被覆盖的方法。在子类中可以使用super引用被覆盖的方法。,Example:Circle.java, Rectangle.java, TestCircleRectangle.java,覆盖与重载,public class Test public static void main(String args) A a = new A(); a.p(10); class B public void p(int i) class A extends B public void p(int i) System.out.println(i); ,public class Test public static void main(String args) A a = new A(); a.p(10); class B public void p(int i) class A extends B public void p(double i) System.out.println(i); ,Object类,java.lang.Object类是所有类的父类。如果一个类在声明时没有指定父类,那么这个类的父类是Object类。 equals方法:用于测试两个对象是否相等。Object类的默认实现是比较两个对象是否引用同一个对象。 toString方法:返回代表这个对象的字符串。Object类的默认实现是返回由类名、和hashCode组成。,多态性、动态绑定,当调用实例方法时,由Java虚拟机动态地决定所调用的方法,称为动态绑定(dynamic binding) 或为多态(polymorphism)。 假定对象o是类C1的实例,C1是C2的子类,C2是C3的子类,Cn-1是Cn的子类。也就是说,Cn是最一般的类,C1是最特殊的类。在Java中,Cn是Object类。如果调用o的方法p,Java虚拟机按照C1、C2、Cn的顺序依次查找方法p的实现。一旦找到一个实现,将停止查找,并执行找到的第一个实现。,通用编程,父类变量可以引用子类对象,针对父类对象设计的任何代码都可以应用于子类对象。 多态性允许方法使用更通用的类作为参数类型。 如果方法参数是父类,那么这个参数可以接受任何子类对象作为实参。当调用这对象的方法时,将动态绑定方法的实现。,Example:PolymorphismDemo.java,类型转换,类型转换(type casting)可以将一个对象的类型转换成继承结构中的另一种类型。 从子类到父类的转换是合法的,称为隐式转换。 m(new Student(); Object o = new Student(); m(o); 从父类到子类必须显式转换,被转换的变量所指向的对象的类型必须是转换类或它的子类。 Object o = new Student(); Student s = (Student)o; o所指向的对象必须是Student或Student子类的对象,instanceof操作符,可以用instanceof操作符判断一个对象是否是一个类的实例。表达式返回boolean值。 语法 referenceVariable instanceof TypeName,例 强制类型转换,编写程序,创建两个几何对象:圆和矩形。调用displayObject来显示结果。 如果对象是圆,显示半径和面积 如果对象是矩形,显示面积,Example:TestPolymorphismCasting.java,隐藏数据字段和静态方法,如果子类中声明的数据字段和静态方法与父类中的名称相同,那么父类中的将被隐藏(hide)。 通过super关键字访问被隐藏的数据字段和静态方法。 通过父类型的变量访问被隐藏的数据字段和静态方法。 成员访问 实例方法根据变量所引用的对象的实际类型进行访问。 数据字段和静态方法根据变量的声明类型进行访问。,Example:HideDemo.java,A x = new B();,protected修饰符,protected修饰符用于修饰数据和方法,可以被同一个包中的任何类或不同包中的子类访问。,C1,public int x protected int y int z private int u,C2中的代码可以访问x,y,z C3中的代码可以访问c1对象中的x,y,z C4中的代码可以访问x,y C5中的代码可以访问c1对象中的x,类成员的访问控制符 类的访问控制符 public:类可以被任何包中的类访问 无(package):只有同一个包中的类可以访问,访问控制符,final修饰符,final数据:常量,数据初始化后不能再修改。 final方法:最终方法,子类不能覆盖。 final类:最终类,不能派生子类。 String, StringBuffer final局部变量:数据初始化后不能再修改。,抽象类和抽象方法,Java中可以定义不含方法体的方法,方法的方法体由该类的子类根据自己的情况去实现,这样的方法称为抽象方法(abstract method),包含抽象方法的类必须是抽象类(abstract class)。 一个类C如果满足下面的任一条件,则该类包含抽象方法: 类C显式地包含一个抽象方法的声明; 类C的父类中声明的抽象方法未在类C和它的父类中实现; 类C的父接口中声明或继承一个方法,并且类C中未声明或继承一个方法来实现它。,注意,抽象类和抽象方法必须用abstract关键字来修饰。 只有实例方法可以声明为抽象方法。 抽象类不能被实例化,即不能用new关键字创建对象。 抽象类的父类可以是具体类。 具体子类必须实现抽象父类中所有抽象方法,否则子类需要声明为抽象类。,抽象类示例,Example:GeometricObject.java,Circle.java, Rectangle.java, TestGeometricObject.java,接口,接口是常量和抽象方法的集合。接口是能力、规范、协议的反映。 语法 modifier interface interfaceName constant_declaration* abstract_method_declaration* 接口中的数据字段隐含为public static final 接口体中的方法隐式地声明为public abstract,使用接口,可以在能够使用任何其他数据类型的地方使用接口。 接口类型属于引用类型,接口类型的变量可以存储: 空引用(null) 任何实现该接口的类的实例的引用 类实现接口的语法 modifier class className extends superclass implements interfaceNameList member_declaration* 除非类被声明为abstract,所有父接口中声明的成员方法必须被实现,或者通过在类中声明或者通过从父类继承已有的方法声明。,例1,public interface Flyer void takeOff(); void land(); void fly(); public class Airplane implements Flyer public void takeOff() / 加速直到离地升空 / 收起起落架 public void land() / 放下起落架 / 减速并降低副翼直到降落 / 刹车 public void fly() / 保持引擎运转 ,例2,例3,例4,接口继承,一个接口可以继承多个接口。 语法 modifier interface interfaceName extends interfaceNameList declaration* 如果接口声明中提供了extends子句那么该接口就继承了父接口的成员类型、方法和常量。这些接口称为声明接口的直接父接口。 任何实现该接口的类,必须实现该接口继承的其他接口。,接口和抽象类的比较,基本数据类型的包装类,作用 为基本数据类型提供方法和常量值 用于只能处理对象引用的地方 包装类的对象的值是不变的,Number,Byte,Short,Integer,Long,Float,Double,Character,Boolean,Object,构造函数与通用方法,构造函数 以一个对应的基本数据类型为参数 以字符串为参数(除了Character) 通用方法 public static Type valueOf(String str) public String toString() public type typeValue() public int compareTo(Type other) public int compareTo(Object obj) public boolean equals(Object obj) public int hashCode(),Number,方法 public abstract int intValue() public abstract long longValue() public abstract float floatValue() public abstract double doubleValue() public byte byteValue() public short shortValue(),整数包装类,Byte, Short, Integer, Long 方法 public static type parseType(String s) public static type parseType(String s, int radix) public static Type valueOf(String s, int radix) public static String toString(type val, int radix) public static String toHexString(type val) public static String toOctalString(type val) public static String toBinaryString(type val),浮点包装类,Float, Double 常量 POSITIVE_INFINITY NEGATIVE_INFINITY NAN 方法 public boolean isInfinite() public boolean isNaN() public

温馨提示

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

评论

0/150

提交评论