工学Part03-Java面向对象编程高级篇课件_第1页
工学Part03-Java面向对象编程高级篇课件_第2页
工学Part03-Java面向对象编程高级篇课件_第3页
工学Part03-Java面向对象编程高级篇课件_第4页
工学Part03-Java面向对象编程高级篇课件_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

Java程序设计第三部分面向对象程序设计—高级篇Java程序设计第三部分面向对象程序设计—高级篇学习目标理解类继承的概念以及父类和子类的关系理解super关键字掌握方法覆盖、多态性、动态绑定和对象的强制类型转换理解数据字段和静态方法的隐藏掌握修饰符:protected、final设计和使用抽象类掌握接口的声明和实现学习目标理解类继承的概念以及父类和子类的关系Employee和ManagerpublicclassEmployee{publicStringname;publicdoublesalary;publicDatebirthDate;publicStringgetDetails(){...}}publicclassManager{publicStringname;publicdoublesalary;publicDatebirthDate;publicStringdepartment;publicStringgetDetails(){...}}Employee和ManagerpublicclassE继承publicclassEmployee{publicStringname;publicdoublesalary;publicDatebirthDate;publicStringgetDetails(){...}}publicclassManagerextendsEmployee{publicStringdepartment;}Employee+++namesalarybirthDate:String:double:Date+getDetails():StringManager+department:String继承publicclassEmployee{publi父类和子类语法

classClassName

extendsSuperclass{classbody}如果classC1extendsC2,则称C1为子类(subclass),C2为父类(superclass)。子类继承了父类中可访问的数据和方法,子类也可添加新的数据和方法,子类不继承父类的构造函数。一个类只能有一个直接父类。继承ManagerEmployeeEmployee的数据Employee的方法Employee的数据Manager的数据Employee的方法Manager的方法父类和子类语法继承ManagerEmployeeEmploy例

几何对象类编写程序,父类GeometricObject,两个子类Circle和Rectangle。Example:Circle.java,Rectangle.java,TestCircleRectangle.java例几何对象类编写程序,父类GeometricObject,super关键字调用父类的构造函数super(parametersopt)调用父类的的构造函数。必须是子类构造函数的第一条语句。如果子类中没有显式地调用父类的构造函数,那么将自动调用父类不带参数的构造函数。父类的构造函数在子类构造函数之前执行。调用父类的成员super.datasuper.method(parameters)super关键字调用父类的构造函数方法覆盖如果子类重新定义了从父类中继承的实例方法,称为方法覆盖(methodoverride)。仅当方法是可访问的实例方法时,才能被覆盖,即私有方法不能被覆盖。静态方法不能被覆盖,如果静态方法在子类中重新定义,那么父类方法将被隐藏。一旦父类中的方法被覆盖,则不能从子类外部访问被覆盖的方法。在子类中可以使用super引用被覆盖的方法。Example:Circle.java,Rectangle.java,TestCircleRectangle.java方法覆盖如果子类重新定义了从父类中继承的实例方法,称为方法覆覆盖与重载publicclassTest{publicstaticvoidmain(String[]args){Aa=newA();a.p(10);}}classB{publicvoidp(inti){}}classAextendsB{publicvoidp(inti){System.out.println(i);}}publicclassTest{publicstaticvoidmain(String[]args){Aa=newA();a.p(10);}}classB{publicvoidp(inti){}}classAextendsB{publicvoidp(doublei){System.out.println(i);}}覆盖与重载publicclassTest{publicObject类java.lang.Object类是所有类的父类。如果一个类在声明时没有指定父类,那么这个类的父类是Object类。equals方法:用于测试两个对象是否相等。Object类的默认实现是比较两个对象是否引用同一个对象。toString方法:返回代表这个对象的字符串。Object类的默认实现是返回由类名、@和hashCode组成。Object类java.lang.Object类是所有类的父多态性、动态绑定当调用实例方法时,由Java虚拟机动态地决定所调用的方法,称为动态绑定(dynamicbinding)或为多态(polymorphism)。假定对象o是类C1的实例,C1是C2的子类,C2是C3的子类,…,Cn-1是Cn的子类。也就是说,Cn是最一般的类,C1是最特殊的类。在Java中,Cn是Object类。如果调用o的方法p,Java虚拟机按照C1、C2、…、Cn的顺序依次查找方法p的实现。一旦找到一个实现,将停止查找,并执行找到的第一个实现。CnCn-1…C2C1Object查找方法p的顺序对象o多态性、动态绑定当调用实例方法时,由Java虚拟机动态地决定通用编程父类变量可以引用子类对象,针对父类对象设计的任何代码都可以应用于子类对象。多态性允许方法使用更通用的类作为参数类型。如果方法参数是父类,那么这个参数可以接受任何子类对象作为实参。当调用这对象的方法时,将动态绑定方法的实现。Example:PolymorphismDemo.java通用编程父类变量可以引用子类对象,针对父类对象设计的任何代码类型转换类型转换(typecasting)可以将一个对象的类型转换成继承结构中的另一种类型。从子类到父类的转换是合法的,称为隐式转换。m(newStudent());Objecto=newStudent();m(o);从父类到子类必须显式转换,被转换的变量所指向的对象的类型必须是转换类或它的子类。 Objecto=newStudent();

Students=(Student)o; o所指向的对象必须是Student或Student子类的对象类型转换类型转换(typecasting)可以将一个对象的instanceof操作符可以用instanceof操作符判断一个对象是否是一个类的实例。表达式返回boolean值。语法referenceVariableinstanceofTypeNameinstanceof操作符可以用instanceof操作符判例

强制类型转换编写程序,创建两个几何对象:圆和矩形。调用displayObject来显示结果。如果对象是圆,显示半径和面积如果对象是矩形,显示面积Example:TestPolymorphismCasting.java例强制类型转换编写程序,创建两个几何对象:圆和矩形。调用d隐藏数据字段和静态方法如果子类中声明的数据字段和静态方法与父类中的名称相同,那么父类中的将被隐藏(hide)。通过super关键字访问被隐藏的数据字段和静态方法。通过父类型的变量访问被隐藏的数据字段和静态方法。成员访问实例方法根据变量所引用的对象的实际类型进行访问。数据字段和静态方法根据变量的声明类型进行访问。Example:HideDemo.javaAx=newB();隐藏数据字段和静态方法如果子类中声明的数据字段和静态方法与父protected修饰符protected修饰符用于修饰数据和方法,可以被同一个包中的任何类或不同包中的子类访问。P2P1C1publicintxprotectedintyintzprivateintuC4C5C1c1=newC1()C2C3C1c1=newC1()C2中的代码可以访问x,y,zC3中的代码可以访问c1对象中的x,y,zC4中的代码可以访问x,yC5中的代码可以访问c1对象中的xprotected修饰符protected修饰符用于修饰数据类成员的访问控制符类的访问控制符public:类可以被任何包中的类访问无(package):只有同一个包中的类可以访问访问控制符成员修饰符同一个类相同包中的类子类不同包中的类public√√√√protected√√√无(package)√√private√类成员的访问控制符访问控制符成员修饰符同一个类相同包中的类子final修饰符final数据:常量,数据初始化后不能再修改。final方法:最终方法,子类不能覆盖。final类:最终类,不能派生子类。String,StringBufferfinal局部变量:数据初始化后不能再修改。final修饰符final数据:常量,数据初始化后不能再修改抽象类和抽象方法Java中可以定义不含方法体的方法,方法的方法体由该类的子类根据自己的情况去实现,这样的方法称为抽象方法(abstractmethod),包含抽象方法的类必须是抽象类(abstractclass)。一个类C如果满足下面的任一条件,则该类包含抽象方法:类C显式地包含一个抽象方法的声明;类C的父类中声明的抽象方法未在类C和它的父类中实现;类C的父接口中声明或继承一个方法,并且类C中未声明或继承一个方法来实现它。抽象类和抽象方法Java中可以定义不含方法体的方法,方法的方20注意抽象类和抽象方法必须用abstract关键字来修饰。只有实例方法可以声明为抽象方法。抽象类不能被实例化,即不能用new关键字创建对象。抽象类的父类可以是具体类。具体子类必须实现抽象父类中所有抽象方法,否则子类需要声明为抽象类。注意抽象类和抽象方法必须用abstract关键字来修饰。21抽象类示例Circle-radius:double+++++<<Override>><<Override>>getRadius()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+++++++<<Override>><<Override>>getWidth()setWidth(doublewidth)getHeight()setHeight(doubleheight)getArea()getPerimeter()toString():double:void:double:void:double:double:String<<Override>><<Override>>Example:GeometricObject.java,Circle.java,Rectangle.java,TestGeometricObject.java抽象类示例Circle-radius:double++++22接口接口是常量和抽象方法的集合。接口是能力、规范、协议的反映。语法[modifier]interface

interfaceName{

constant_declaration*

abstract_method_declaration*}接口中的数据字段隐含为publicstaticfinal接口体中的方法隐式地声明为publicabstract接口接口是常量和抽象方法的集合。接口是能力、规范、协议的反映23使用接口可以在能够使用任何其他数据类型的地方使用接口。接口类型属于引用类型,接口类型的变量可以存储:空引用(null)任何实现该接口的类的实例的引用类实现接口的语法[modifier]class

className[extends

superclass][implements

interfaceNameList]{ member_declaration*}除非类被声明为abstract,所有父接口中声明的成员方法必须被实现,或者通过在类中声明或者通过从父类继承已有的方法声明。使用接口可以在能够使用任何其他数据类型的地方使用接口。24例1publicinterfaceFlyer{voidtakeOff();voidland();voidfly();}publicclassAirplaneimplementsFlyer{publicvoidtakeOff(){//加速直到离地升空

//收起起落架

}publicvoidland(){//放下起落架

//减速并降低副翼直到降落

//刹车

}publicvoidfly(){//保持引擎运转

}}例1publicinterfaceFlyer{25例2例226例3例327例4例428接口继承一个接口可以继承多个接口。语法

[modifier]interface

interfaceName[extends

interfaceNameList]{ declaration* }如果接口声明中提供了extends子句那么该接口就继承了父接口的成员类型、方法和常量。这些接口称为声明接口的直接父接口。任何实现该接口的类,必须实现该接口继承的其他接口。接口继承一个接口可以继承多个接口。29接口和抽象类的比较接口抽象类多重继承一个类可以实现多个接口一个类只能扩展一个抽象类方法接口不能提供任何代码抽象类可以提供完整代码、缺省代码以及用于覆盖的存根。数据字段只包含publicstaticfinal常量,常量必须在声明时初始化。可以包含实例变量和静态变量。静态和实例初始化代码可用于常量计算。现有类任何现有的类都可以添加一个接口的实现现有类必须重写,只从抽象类派生含义接口通常用于描述一个类的外围能力,而不是核心特征,例如Automobile类可以实现Recyclable接口,而Recyclables可以应用于其他不相关的对象。类与接口之间的是-able或者cando的关系。抽象类定义了它的后代的核心特征。例如Person类包含了Student类的核心特征。派生类与抽象类之间是is-a的关系。适用性所有的实现只是共享方法签名所有实现大同小异,并且共享状态和行为简洁性接口中的常量都被假定为publicstaticfinal,可以省略。不能调用任何方法计算这些常量的初始值。接口中的方法被假定为publicabstract。可以在抽象类中放置共享代码。可以使用方法来计算实例和静态变量(常量)的初始值。必须用abstract显式声明方法为抽象方法。添加功能如果为接口添加一个新的方法,则必须查找所有实现该接口的类,并为他们逐一提供该方法的实现。如果为抽象类提供一个方法,可以选择提供一个缺省的实现,那么所有已存在的代码不需要修改就可以继续工作。接口和抽象类的比较接口抽象类多重继承一个类可以实现多个接口一30基本数据类型的包装类作用为基本数据类型提供方法和常量值用于只能处理对象引用的地方包装类的对象的值是不变的NumberByteShortIntegerLongFloatDoubleCharacterBooleanObjectComparable基本数据类型的包装类作用NumberByteShortInt31构造函数与通用方法构造函数以一个对应的基本数据类型为参数以字符串为参数(除了Character)通用方法publicstaticTypevalueOf(Stringstr)publicStringtoString()publictypetypeValue()publicintcompareTo(Typeother)publicintcompareTo(Objectobj)publicbooleanequals(Objectobj)publicinthashCode()构造函数与通用方法构造函数32Number方法publicabstractintintValue()publicabstractlonglongValue()publicabstractfloatfloatValue()publicabstractdoubledoubleValue()publicbytebyteValue()publicshortshortValue()Number方法33整数包装类Byte,Short,Integer,Long方法publicstatictypeparseType(Strings)publicstatictypeparseType(Strings,intradix)publicstaticTypevalueOf(Strings,intradix)publicstaticStringtoString(typeval,intradix)publicstaticStringtoHexString(typeval)publicstaticStringtoOctalString(typeval)publicstaticStringtoBinaryString(typeval)整数包装类Byte,Short,Integer,Lon34浮点包装类Float,Double常量POSITIVE_INFINITYNEGATIVE_INFINITYNAN方法publicbooleanisInfinite()publicbooleanisNaN()publicstatictypeparseType(Strings)publicstaticStringtoString(inti)浮点包装类Float,Double35例

排序对象数组编写程序,对Comparable对象数组进行排序。Example:GenericSort.java例排序对象数组编写程序,对Comparable对象数组进行36基本类型与包装类之间的自动转换JDK1.5允许基本类型和包装类之间的自动转换。将基本类型的值转换为包装类对象,称为装箱(boxing)将包装类对象转换为基本类型的值,称为开箱(unboxing)IntegerintObject=2;等价于IntegerintObject=newInteger(2);基本类型与包装类之间的自动转换JDK1.5允许基本类型和包装37Java程序设计第三部分面向对象程序设计—高级篇Java程序设计第三部分面向对象程序设计—高级篇学习目标理解类继承的概念以及父类和子类的关系理解super关键字掌握方法覆盖、多态性、动态绑定和对象的强制类型转换理解数据字段和静态方法的隐藏掌握修饰符:protected、final设计和使用抽象类掌握接口的声明和实现学习目标理解类继承的概念以及父类和子类的关系Employee和ManagerpublicclassEmployee{publicStringname;publicdoublesalary;publicDatebirthDate;publicStringgetDetails(){...}}publicclassManager{publicStringname;publicdoublesalary;publicDatebirthDate;publicStringdepartment;publicStringgetDetails(){...}}Employee和ManagerpublicclassE继承publicclassEmployee{publicStringname;publicdoublesalary;publicDatebirthDate;publicStringgetDetails(){...}}publicclassManagerextendsEmployee{publicStringdepartment;}Employee+++namesalarybirthDate:String:double:Date+getDetails():StringManager+department:String继承publicclassEmployee{publi父类和子类语法

classClassName

extendsSuperclass{classbody}如果classC1extendsC2,则称C1为子类(subclass),C2为父类(superclass)。子类继承了父类中可访问的数据和方法,子类也可添加新的数据和方法,子类不继承父类的构造函数。一个类只能有一个直接父类。继承ManagerEmployeeEmployee的数据Employee的方法Employee的数据Manager的数据Employee的方法Manager的方法父类和子类语法继承ManagerEmployeeEmploy例

几何对象类编写程序,父类GeometricObject,两个子类Circle和Rectangle。Example:Circle.java,Rectangle.java,TestCircleRectangle.java例几何对象类编写程序,父类GeometricObject,super关键字调用父类的构造函数super(parametersopt)调用父类的的构造函数。必须是子类构造函数的第一条语句。如果子类中没有显式地调用父类的构造函数,那么将自动调用父类不带参数的构造函数。父类的构造函数在子类构造函数之前执行。调用父类的成员super.datasuper.method(parameters)super关键字调用父类的构造函数方法覆盖如果子类重新定义了从父类中继承的实例方法,称为方法覆盖(methodoverride)。仅当方法是可访问的实例方法时,才能被覆盖,即私有方法不能被覆盖。静态方法不能被覆盖,如果静态方法在子类中重新定义,那么父类方法将被隐藏。一旦父类中的方法被覆盖,则不能从子类外部访问被覆盖的方法。在子类中可以使用super引用被覆盖的方法。Example:Circle.java,Rectangle.java,TestCircleRectangle.java方法覆盖如果子类重新定义了从父类中继承的实例方法,称为方法覆覆盖与重载publicclassTest{publicstaticvoidmain(String[]args){Aa=newA();a.p(10);}}classB{publicvoidp(inti){}}classAextendsB{publicvoidp(inti){System.out.println(i);}}publicclassTest{publicstaticvoidmain(String[]args){Aa=newA();a.p(10);}}classB{publicvoidp(inti){}}classAextendsB{publicvoidp(doublei){System.out.println(i);}}覆盖与重载publicclassTest{publicObject类java.lang.Object类是所有类的父类。如果一个类在声明时没有指定父类,那么这个类的父类是Object类。equals方法:用于测试两个对象是否相等。Object类的默认实现是比较两个对象是否引用同一个对象。toString方法:返回代表这个对象的字符串。Object类的默认实现是返回由类名、@和hashCode组成。Object类java.lang.Object类是所有类的父多态性、动态绑定当调用实例方法时,由Java虚拟机动态地决定所调用的方法,称为动态绑定(dynamicbinding)或为多态(polymorphism)。假定对象o是类C1的实例,C1是C2的子类,C2是C3的子类,…,Cn-1是Cn的子类。也就是说,Cn是最一般的类,C1是最特殊的类。在Java中,Cn是Object类。如果调用o的方法p,Java虚拟机按照C1、C2、…、Cn的顺序依次查找方法p的实现。一旦找到一个实现,将停止查找,并执行找到的第一个实现。CnCn-1…C2C1Object查找方法p的顺序对象o多态性、动态绑定当调用实例方法时,由Java虚拟机动态地决定通用编程父类变量可以引用子类对象,针对父类对象设计的任何代码都可以应用于子类对象。多态性允许方法使用更通用的类作为参数类型。如果方法参数是父类,那么这个参数可以接受任何子类对象作为实参。当调用这对象的方法时,将动态绑定方法的实现。Example:PolymorphismDemo.java通用编程父类变量可以引用子类对象,针对父类对象设计的任何代码类型转换类型转换(typecasting)可以将一个对象的类型转换成继承结构中的另一种类型。从子类到父类的转换是合法的,称为隐式转换。m(newStudent());Objecto=newStudent();m(o);从父类到子类必须显式转换,被转换的变量所指向的对象的类型必须是转换类或它的子类。 Objecto=newStudent();

Students=(Student)o; o所指向的对象必须是Student或Student子类的对象类型转换类型转换(typecasting)可以将一个对象的instanceof操作符可以用instanceof操作符判断一个对象是否是一个类的实例。表达式返回boolean值。语法referenceVariableinstanceofTypeNameinstanceof操作符可以用instanceof操作符判例

强制类型转换编写程序,创建两个几何对象:圆和矩形。调用displayObject来显示结果。如果对象是圆,显示半径和面积如果对象是矩形,显示面积Example:TestPolymorphismCasting.java例强制类型转换编写程序,创建两个几何对象:圆和矩形。调用d隐藏数据字段和静态方法如果子类中声明的数据字段和静态方法与父类中的名称相同,那么父类中的将被隐藏(hide)。通过super关键字访问被隐藏的数据字段和静态方法。通过父类型的变量访问被隐藏的数据字段和静态方法。成员访问实例方法根据变量所引用的对象的实际类型进行访问。数据字段和静态方法根据变量的声明类型进行访问。Example:HideDemo.javaAx=newB();隐藏数据字段和静态方法如果子类中声明的数据字段和静态方法与父protected修饰符protected修饰符用于修饰数据和方法,可以被同一个包中的任何类或不同包中的子类访问。P2P1C1publicintxprotectedintyintzprivateintuC4C5C1c1=newC1()C2C3C1c1=newC1()C2中的代码可以访问x,y,zC3中的代码可以访问c1对象中的x,y,zC4中的代码可以访问x,yC5中的代码可以访问c1对象中的xprotected修饰符protected修饰符用于修饰数据类成员的访问控制符类的访问控制符public:类可以被任何包中的类访问无(package):只有同一个包中的类可以访问访问控制符成员修饰符同一个类相同包中的类子类不同包中的类public√√√√protected√√√无(package)√√private√类成员的访问控制符访问控制符成员修饰符同一个类相同包中的类子final修饰符final数据:常量,数据初始化后不能再修改。final方法:最终方法,子类不能覆盖。final类:最终类,不能派生子类。String,StringBufferfinal局部变量:数据初始化后不能再修改。final修饰符final数据:常量,数据初始化后不能再修改抽象类和抽象方法Java中可以定义不含方法体的方法,方法的方法体由该类的子类根据自己的情况去实现,这样的方法称为抽象方法(abstractmethod),包含抽象方法的类必须是抽象类(abstractclass)。一个类C如果满足下面的任一条件,则该类包含抽象方法:类C显式地包含一个抽象方法的声明;类C的父类中声明的抽象方法未在类C和它的父类中实现;类C的父接口中声明或继承一个方法,并且类C中未声明或继承一个方法来实现它。抽象类和抽象方法Java中可以定义不含方法体的方法,方法的方57注意抽象类和抽象方法必须用abstract关键字来修饰。只有实例方法可以声明为抽象方法。抽象类不能被实例化,即不能用new关键字创建对象。抽象类的父类可以是具体类。具体子类必须实现抽象父类中所有抽象方法,否则子类需要声明为抽象类。注意抽象类和抽象方法必须用abstract关键字来修饰。58抽象类示例Circle-radius:double+++++<<Override>><<Override>>getRadius()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+++++++<<Override>><<Override>>getWidth()setWidth(doublewidth)getHeight()setHeight(doubleheight)getArea()getPerimeter()toString():double:void:double:void:double:double:String<<Override>><<Override>>Example:GeometricObject.java,Circle.java,Rectangle.java,TestGeometricObject.java抽象类示例Circle-radius:double++++59接口接口是常量和抽象方法的集合。接口是能力、规范、协议的反映。语法[modifier]interface

interfaceName{

constant_declaration*

abstract_method_declaration*}接口中的数据字段隐含为publicstaticfinal接口体中的方法隐式地声明为publicabstract接口接口是常量和抽象方法的集合。接口是能力、规范、协议的反映60使用接口可以在能够使用任何其他数据类型的地方使用接口。接口类型属于引用类型,接口类型的变量可以存储:空引用(null)任何实现该接口的类的实例的引用类实现接口的语法[modifier]class

className[extends

superclass][implements

interfaceNameList]{ member_declaration*}除非类被声明为abstract,所有父接口中声明的成员方法必须被实现,或者通过在类中声明或者通过从父类继承已有的方法声明。使用接口可以在能够使用任何其他数据类型的地方使用接口。61例1publicinterfaceFlyer{voidtakeOff();voidland();voidfly();}publicclassAirplaneimplementsFlyer{publicvoidtakeOff(){//加速直到离地升空

//收起起落架

}publicvoidland(){//放下起落架

//减速并降低副翼直到降落

//刹车

}publicvoidfly(){//保持引擎运转

}}例1publicinterfaceFlyer{62例2例263例3例364例4例465接口继承一个接口可以继承多个接口。语法

[modifier]interface

interfaceName[extends

interfaceNameList]{ declaration* }如果接口声明中提供了extends子句那么该接口就继承了父接口的成员类型、方法和常量。这些接口称为声明接口的直接父接口。任何实现该接口的类,必须实现该接口继承的其他接口。接口继承一个接口可以继承多个接口。66接口和抽象类的比较接口抽象类多重继承一个类可以实现多个接口一个类只能扩展一个抽象类方法接口不能提供任何代码抽象类可以提供完整代码、缺省代码以及用于覆盖的存根。数据字段只包含publicstaticfinal常量,常量必须在声明时初始化。可以包含实例变量和静态变量。静态和实例初始化代码可用于常量计算。现有类任何现有的类都可以添加一个接口的实现现有类必须重写,只从抽象类派生含义接口通常用于描述一个类的外围能力,而不是核心特征,例如Automobile类可以实现Recyclable接口,而Recyclables可以应用于其他不相关的对象。类与接口之间的是-able或者cando的关系。抽象类定义了它的后代的核心特征。例如Person类包含了Student类的核心特征。派生类与抽象类之间是is-a的关系。适用性所有的实现只是共享方法签名所有实现大同小异,并且共享状态和行为简洁性接口中的常量都被假定为

温馨提示

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

评论

0/150

提交评论