您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > JAVA全套简明教程ch10---抽象类和接口
YANGLIN@BNUITCJava程序设计第10章抽象类和接口学习目标设计和使用抽象类掌握接口的声明和实现了解抽象类和接口的异同掌握基本数据类型的包装类型了解JDK1.5中基本数据类型与包装类型的自动转换抽象类和抽象方法Java中可以定义不含方法体的方法,方法的方法体由该类的子类根据自己的情况去实现,这样的方法称为抽象方法(abstractmethod),包含抽象方法的类必须是抽象类(abstractclass)。一个类C如果满足下面的任一条件,则该类包含抽象方法:类C显式地包含一个抽象方法的声明;类C的父类中声明的抽象方法未在类C和它的父类中实现;类C的父接口中声明或继承一个方法,并且类C中未声明或继承一个方法来实现它。注意抽象类和抽象方法必须用abstract关键字来修饰。只有实例方法可以声明为抽象方法。抽象类不能被实例化,即不能用new关键字创建对象。抽象类的父类可以是具体类。具体子类必须实现抽象父类中所有抽象方法,否则子类需要声明为抽象类。抽象类示例Circle-radius:double+++++OverrideOverridegetRadius()setRadius(doubleradius)getArea()getPerimeter()toString():double:void:double:double:StringGeometricObject--colorfilled:String:boolean++++++getColor()setColor(Stringcolor)isFilled()setFilled(booleanfilled)getArea()getPerimeter():String:void:boolean:void:double:doubleRectangle--widthheight:double:double+++++++OverrideOverridegetWidth()setWidth(doublewidth)getHeight()setHeight(doubleheight)getArea()getPerimeter()toString():double:void:double:void:double:double:StringOverrideOverrideExample:GeometricObject.java,Circle.java,Rectangle.java,TestGeometricObject.java接口接口是常量和抽象方法的集合。接口是能力、规范、协议的反映。语法[modifier]interfaceinterfaceName{constant_declaration*abstract_method_declaration*}接口中的数据字段隐含为publicstaticfinal接口体中的方法隐式地声明为publicabstract使用接口可以在能够使用任何其他数据类型的地方使用接口。接口类型属于引用类型,接口类型的变量可以存储:空引用(null)任何实现该接口的类的实例的引用类实现接口的语法[modifier]classclassName[extendssuperclass][implementsinterfaceNameList]{member_declaration*}除非类被声明为abstract,所有父接口中声明的成员方法必须被实现,或者通过在类中声明或者通过从父类继承已有的方法声明。例1Flyer+++takeOff()land()fly()AirPlane+++takeOff()land()fly()publicinterfaceFlyer{voidtakeOff();voidland();voidfly();}publicclassAirplaneimplementsFlyer{publicvoidtakeOff(){//加速直到离地升空//收起起落架}publicvoidland(){//放下起落架//减速并降低副翼直到降落//刹车}publicvoidfly(){//保持引擎运转}}例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()fly()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()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接口继承一个接口可以继承多个接口。语法[modifier]interfaceinterfaceName[extendsinterfaceNameList]{declaration*}如果接口声明中提供了extends子句那么该接口就继承了父接口的成员类型、方法和常量。这些接口称为声明接口的直接父接口。任何实现该接口的类,必须实现该接口继承的其他接口。接口和抽象类的比较接口抽象类多重继承一个类可以实现多个接口一个类只能扩展一个抽象类方法接口不能提供任何代码抽象类可以提供完整代码、缺省代码以及用于覆盖的存根。数据字段只包含publicstaticfinal常量,常量必须在声明时初始化。可以包含实例变量和静态变量。静态和实例初始化代码可用于常量计算。现有类任何现有的类都可以添加一个接口的实现现有类必须重写,只从抽象类派生含义接口通常用于描述一个类的外围能力,而不是核心特征,例如Automobile类可以实现Recyclable接口,而Recyclables可以应用于其他不相关的对象。类与接口之间的是-able或者cando的关系。抽象类定义了它的后代的核心特征。例如Person类包含了Student类的核心特征。派生类与抽象类之间是is-a的关系。适用性所有的实现只是共享方法签名所有实现大同小异,并且共享状态和行为简洁性接口中的常量都被假定为publicstaticfinal,可以省略。不能调用任何方法计算这些常量的初始值。接口中的方法被假定为publicabstract。可以在抽象类中放置共享代码。可以使用方法来计算实例和静态变量(常量)的初始值。必须用abstract显式声明方法为抽象方法。添加功能如果为接口添加一个新的方法,则必须查找所有实现该接口的类,并为他们逐一提供该方法的实现。如果为抽象类提供一个方法,可以选择提供一个缺省的实现,那么所有已存在的代码不需要修改就可以继续工作。基本数据类型的包装类作用为基本数据类型提供方法和常量值用于只能处理对象引用的地方包装类的对象的值是不变的NumberByteShortIntegerLongFloatDoubleCharacterBooleanObjectComparable构造函数与通用方法构造函数以一个对应的基本数据类型为参数以字符串为参数(除了Character)通用方法publicstaticTypevalueOf(Stringstr)publicStringtoString()publictypetypeValue()publicintcompareTo(Typeother)publicintcompareTo(Objectobj)publicbooleanequals(Objectobj)publicinthashCode()Number方法publicabstractintintValue()publicabstractlonglongValue()publicabstractfloatfloatValue()publicabstractdoubledoubleValue()publicbytebyteValue()publicshortshortValue()整数包装类Byte,Short,Integer,Long方法publicstatictypeparseType(Strings)publicstatictypeparseType(Strings,intradix)publicstaticTypevalueOf(Strings,intradix)publicstaticStringtoString(typeval,intradix)publicstaticStringtoHexString(typeval)publicstaticStringtoOctalString(typeval)publicstaticStringtoBinaryString(typeval)浮点包装类Float,Double常量POSITIVE_INFINITYNEGATIVE_INFINITYNAN方法publicbooleanisInfinite()publicbooleanisNaN()publicstatictypeparseType(Strings)publicstaticStringtoString(inti)例排序对象数组编写程序,对Comparable对象数组进行排序。Example:GenericSort.java基本类型与包装类之间的自动转换JDK1.5允许基本类型和包装类之间的自动转换。将基本类型的值转换为包装类对象,称为装箱(boxing)将包装类对象转换为基本类型的值,称为开箱(unboxing)IntegerintObject=2;等价于IntegerintObject=newInteger(2);
本文标题:JAVA全套简明教程ch10---抽象类和接口
链接地址:https://www.777doc.com/doc-1872547 .html