[工学]Part03-Java面向对象编程高级篇课件.ppt

上传人(卖家):晟晟文业 文档编号:5102216 上传时间:2023-02-11 格式:PPT 页数:37 大小:450.52KB
下载 相关 举报
[工学]Part03-Java面向对象编程高级篇课件.ppt_第1页
第1页 / 共37页
[工学]Part03-Java面向对象编程高级篇课件.ppt_第2页
第2页 / 共37页
[工学]Part03-Java面向对象编程高级篇课件.ppt_第3页
第3页 / 共37页
[工学]Part03-Java面向对象编程高级篇课件.ppt_第4页
第4页 / 共37页
[工学]Part03-Java面向对象编程高级篇课件.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、Java程序设计第三部分 面向对象程序设计高级篇学习目标o 理解类继承的概念以及父类和子类的关系o 理解super关键字o 掌握方法覆盖、多态性、动态绑定和对象的强制类型转换o 理解数据字段和静态方法的隐藏o 掌握修饰符:protected、finalo 设计和使用抽象类o 掌握接口的声明和实现Employee和ManagerEmployee+namesalarybirthDate:String:double:Date+getDetails():Stringpublic class Employee public String name;public double salary;public

2、Date birthDate;public String getDetails().Manager+namesalarybirthDatedepartment:String:double:Date:String+getDetails():Stringpublic class Manager public String name;public double salary;public Date birthDate;public String department;public String getDetails().继承public class Employee public String na

3、me;public double salary;public Date birthDate;public String getDetails().public class Manager extendsextends Employee public String department;Employee+namesalarybirthDate:String:double:Date+getDetails():StringManager+department:String父类和子类o 语法class ClassName extends Superclass class body o 如果class

4、C1 extends C2,则称C1为子类(subclass),C2为父类(superclass)。n子类继承了父类中可访问的数据和方法,子类也可添加新的数据和方法,n子类不继承父类的构造函数。n一个类只能有一个直接父类。继承ManagerEmployeeEmployee的数据Employee的方法Employee的数据Manager的数据Employee的方法Manager的方法例 几何对象类o 编写程序,父类GeometricObject,两个子类Circle和Rectangle。Example:Circle.java,Rectangle.java,TestCircleRectangle.

5、javaGeometricObject-colorfilleddateCreated:String:boolean:Date+getColor()setColor(String color)isFilled()setFilled(boolean filled)getDateCreated():String:void:boolean:void:DateCircle-radius:double+Circle()Circle(double radius)getRadius()setRadius(double radius)getArea()getPerimeter()getDiameter():do

6、uble:void:double:double:doubleRectangle-widthheight:double:double+Rectangle()Rectangle(double width,double height)getWidth()setWidth(double width)getHeight()setHeight(double height)getArea()getPerimeter():double:void:double:void:double:doublesuper关键字o 调用父类的构造函数nsuper(parametersopt)调用父类的的构造函数。n必须是子类构

7、造函数的第一条语句。n如果子类中没有显式地调用父类的构造函数,那么将自动调用父类不带参数的构造函数。n父类的构造函数在子类构造函数之前执行。o 调用父类的成员nsuper.datansuper.method(parameters)方法覆盖o 如果子类重新定义了从父类中继承的实例方法,称为方法覆盖(method override)。n仅当方法是可访问的实例方法时,才能被覆盖,即私有方法不能被覆盖。n静态方法不能被覆盖,如果静态方法在子类中重新定义,那么父类方法将被隐藏。n一旦父类中的方法被覆盖,则不能从子类外部访问被覆盖的方法。在子类中可以使用super引用被覆盖的方法。Example:Circ

8、le.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 publ

9、ic void p(int i)class A extends B public void p(double i)System.out.println(i);Object类o java.lang.Object类是所有类的父类。如果一个类在声明时没有指定父类,那么这个类的父类是Object类。nequals方法:用于测试两个对象是否相等。Object类的默认实现是比较两个对象是否引用同一个对象。ntoString方法:返回代表这个对象的字符串。Object类的默认实现是返回由类名、和hashCode组成。多态性、动态绑定o 当调用实例方法时,由Java虚拟机动态地决定所调用的方法,称为动态绑定(

10、dynamic binding)或为多态(polymorphism)。假定对象o是类C1的实例,C1是C2的子类,C2是C3的子类,Cn-1是Cn的子类。也就是说,Cn是最一般的类,C1是最特殊的类。在Java中,Cn是Object类。如果调用o的方法p,Java虚拟机按照C1、C2、Cn的顺序依次查找方法p的实现。一旦找到一个实现,将停止查找,并执行找到的第一个实现。CnCn-1C2C1Object查找方法p的顺序对象o通用编程o 父类变量可以引用子类对象,针对父类对象设计的任何代码都可以应用于子类对象。n多态性允许方法使用更通用的类作为参数类型。n如果方法参数是父类,那么这个参数可以接受任

11、何子类对象作为实参。当调用这对象的方法时,将动态绑定方法的实现。Example:PolymorphismDemo.java类型转换o 类型转换(type casting)可以将一个对象的类型转换成继承结构中的另一种类型。n从子类到父类的转换是合法的,称为隐式转换。m(new Student();Object o=new Student();m(o);n从父类到子类必须显式转换,被转换的变量所指向的对象的类型必须是转换类或它的子类。Object o=new Student();Student s=(Student)o;o所指向的对象必须是Student或Student子类的对象instanceo

12、f操作符o 可以用instanceof操作符判断一个对象是否是一个类的实例。表达式返回boolean值。o 语法referenceVariable instanceof TypeName例 强制类型转换o 编写程序,创建两个几何对象:圆和矩形。调用displayObject来显示结果。n如果对象是圆,显示半径和面积n如果对象是矩形,显示面积Example:TestPolymorphismCasting.java隐藏数据字段和静态方法o 如果子类中声明的数据字段和静态方法与父类中的名称相同,那么父类中的将被隐藏(hide)。n通过super关键字访问被隐藏的数据字段和静态方法。n通过父类型的变量

13、访问被隐藏的数据字段和静态方法。o 成员访问n实例方法根据变量所引用的对象的实际类型进行访问。n数据字段和静态方法根据变量的声明类型进行访问。Example:HideDemo.javaA x=new B();protected修饰符o protected修饰符用于修饰数据和方法,可以被同一个包中的任何类或不同包中的子类访问。P2P1C1public int xprotected int yint zprivate int uC4C5C1 c1=new C1()C2C3C1 c1=new C1()C2中的代码可以访问x,y,zC3中的代码可以访问c1对象中的x,y,zC4中的代码可以访问x,yC

14、5中的代码可以访问c1对象中的xo 类成员的访问控制符o 类的访问控制符npublic:类可以被任何包中的类访问n无(package):只有同一个包中的类可以访问访问控制符成员修饰符同一个类相同包中的类子类不同包中的类publicprotected无(package)privatefinal修饰符o final数据:常量,数据初始化后不能再修改。o final方法:最终方法,子类不能覆盖。o final类:最终类,不能派生子类。nString,StringBuffero final局部变量:数据初始化后不能再修改。抽象类和抽象方法o Java中可以定义不含方法体的方法,方法的方法体由该类的子类

15、根据自己的情况去实现,这样的方法称为抽象方法(abstract method),包含抽象方法的类必须是抽象类(abstract class)。o 一个类C如果满足下面的任一条件,则该类包含抽象方法:n类C显式地包含一个抽象方法的声明;n类C的父类中声明的抽象方法未在类C和它的父类中实现;n类C的父接口中声明或继承一个方法,并且类C中未声明或继承一个方法来实现它。注意o 抽象类和抽象方法必须用abstract关键字来修饰。o 只有实例方法可以声明为抽象方法。o 抽象类不能被实例化,即不能用new关键字创建对象。o 抽象类的父类可以是具体类。o 具体子类必须实现抽象父类中所有抽象方法,否则子类需要

16、声明为抽象类。抽象类示例Circle-radius:double+getRadius()setRadius(double radius)getArea()getPerimeter()toString():double:void:double:double:StringGeometricObject-colorfilled:String:boolean+getColor()setColor(String color)isFilled()setFilled(boolean filled)getArea()getPerimeter():String:void:boolean:void:double:

17、doubleRectangle-widthheight:double:double+getWidth()setWidth(double width)getHeight()setHeight(double height)getArea()getPerimeter()toString():double:void:double:void:double:double:StringExample:GeometricObject.java,Circle.java,Rectangle.java,TestGeometricObject.java接口o 接口是常量和抽象方法的集合。接口是能力、规范、协议的反映。

18、o 语法modifier interface interfaceName constant_declaration*abstract_method_declaration*o 接口中的数据字段隐含为public static finalo 接口体中的方法隐式地声明为public abstract使用接口o 可以在能够使用任何其他数据类型的地方使用接口。o 接口类型属于引用类型,接口类型的变量可以存储:n空引用(null)n任何实现该接口的类的实例的引用o 类实现接口的语法modifier class className extends superclass implements interfa

19、ceNameList member_declaration*n除非类被声明为abstract,所有父接口中声明的成员方法必须被实现,或者通过在类中声明或者通过从父类继承已有的方法声明。例1Flyer+takeOff()land()fly()AirPlane+takeOff()land()fly()public interface Flyer void takeOff();void land();void fly();public class Airplane implements Flyer public void takeOff()/加速直到离地升空 /收起起落架 public void l

20、and()/放下起落架 /减速并降低副翼直到降落 /刹车 public void fly()/保持引擎运转 例2Flyer+takeOff()land()fly()AirPlane+takeOff()land()fly()Bird+takeOff()land()fly()buildNest()layEggs()eat()Superman+takeOff()land()fly()leapBuilding()stopBullet()eat()例3AirPlane+takeOff()land()fly()Flyer+takeOff()land()fly()Bird+takeOff()land()fl

21、y()buildNest()layEggs()eat()Superman+takeOff()land()fly()leapBuilding()stopBullet()eat()VehicleAnimal+eat()Human例4RiverBarge+dock()cruise():void:voidSailer+dock()cruise():void:voidAirPlane+takeOff()land()fly():void:void:voidFlyer+takeOff()land()fly():void:void:voidBird+takeOff()land()fly()buildNest(

22、)layEggs()eat():void:void:void:void:void:voidSuperman+takeOff()land()fly()leapBuilding()stopBullet()eat():void:void:void:void:void:voidVehicleAnimal+eat():voidHumanSeaPlane+dock()cruise():void:voidHelicopter接口继承o 一个接口可以继承多个接口。o 语法modifier interface interfaceName extends interfaceNameList declaration

23、*n如果接口声明中提供了extends子句那么该接口就继承了父接口的成员类型、方法和常量。这些接口称为声明接口的直接父接口。n任何实现该接口的类,必须实现该接口继承的其他接口。接口和抽象类的比较接口接口抽象类抽象类多重继承多重继承一个类可以实现多个接口一个类只能扩展一个抽象类方法方法接口不能提供任何代码抽象类可以提供完整代码、缺省代码以及用于覆盖的存根。数据字段数据字段只包含public static final常量,常量必须在声明时初始化。可以包含实例变量和静态变量。静态和实例初始化代码可用于常量计算。现有类现有类任何现有的类都可以添加一个接口的实现现有类必须重写,只从抽象类派生含义含义接口

24、通常用于描述一个类的外围能力,而不是核心特征,例如Automobile类可以实现Recyclable接口,而Recyclables可以应用于其他不相关的对象。类与接口之间的是-able或者can do的关系。抽象类定义了它的后代的核心特征。例如Person类包含了Student类的核心特征。派生类与抽象类之间是is-a的关系。适用性适用性所有的实现只是共享方法签名所有实现大同小异,并且共享状态和行为简洁性简洁性接口中的常量都被假定为public static final,可以省略。不能调用任何方法计算这些常量的初始值。接口中的方法被假定为public abstract。可以在抽象类中放置共享代

25、码。可以使用方法来计算实例和静态变量(常量)的初始值。必须用abstract显式声明方法为抽象方法。添加功能添加功能如果为接口添加一个新的方法,则必须查找所有实现该接口的类,并为他们逐一提供该方法的实现。如果为抽象类提供一个方法,可以选择提供一个缺省的实现,那么所有已存在的代码不需要修改就可以继续工作。基本数据类型的包装类o作用n为基本数据类型提供方法和常量值n用于只能处理对象引用的地方o包装类的对象的值是不变的NumberByteShortIntegerLongFloatDoubleCharacterBooleanObjectComparable构造函数与通用方法o构造函数n以一个对应的基本

26、数据类型为参数n以字符串为参数(除了Character)o通用方法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()Numbero 方法public abstract int intValue()public abstract long lon

27、gValue()public abstract float floatValue()public abstract double doubleValue()public byte byteValue()public short shortValue()整数包装类o Byte,Short,Integer,Longo 方法public static type parseType(String s)public static type parseType(String s,int radix)public static Type valueOf(String s,int radix)public s

28、tatic String toString(type val,int radix)public static String toHexString(type val)public static String toOctalString(type val)public static String toBinaryString(type val)浮点包装类o Float,Doubleo 常量POSITIVE_INFINITYNEGATIVE_INFINITYNANo 方法public boolean isInfinite()public boolean isNaN()public static type parseType(String s)public static String toString(int i)例 排序对象数组o 编写程序,对Comparable对象数组进行排序。Example:GenericSort.java基本类型与包装类之间的自动转换o JDK1.5允许基本类型和包装类之间的自动转换。n将基本类型的值转换为包装类对象,称为装箱(boxing)n将包装类对象转换为基本类型的值,称为开箱(unboxing)Integer intObject=2;等价于Integer intObject=new Integer(2);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文([工学]Part03-Java面向对象编程高级篇课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|