已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章面向对象程序设计Object-OrientedProgramming,5.1类和对象5.2类的封装性5.3类的继承性5.4接口5.5类的多态性,5.1类和对象,面向对象方法类的定义成员变量成员方法构造方法对象的创建和使用类成员与实例成员对象数组,面向对象方法,现实生活中的实体对象,有形的对象医院医生病人手术器械体温计.,无形的对象治疗方案手术规程.,面向对象方法,实体对象的特征分析静态特征:属性特点动态特征:行为功能,姓名性别年龄职称专长,量血压听诊写病历开处方,面向对象方法,实体对象的抽象与数字化表示,【案例5-1】用面向对象方法模拟医生为病人诊疗过程。,案例说明:本案例通过对病人就诊模型的分析与简化,抽象出包括日期、体温计、病人以及医生等四个主要的类,并利用医生类的接诊、开处方、诊疗等实例成员方法将这些类联系起来,重现病人就诊时医生用体温计测量病人体温,给病人诊疗并开据处方的过程。,图5-2案例5-1的运行结果,类的定义,在面向对象的程序设计中,将数据与对数据进行的操作合起来定义为类。类是将数据和与数据相关的操作封装在一起的集合体,用来定义一组对象共同具有的状态(属性)和行为(方法)的模板。类是一种复杂的数据类型,它不但包含数据,还包含了对数据进行操作的方法(Method),通常将类中的数据称为成员变量,而操作数据的方法称为成员方法,二者统称为类的成员。,类的定义,Java类的定义格式如下:说明:(1)类声明定义该类的名称、访问权限、与其他类的关系以及实现的接口等。(2)类主体定义该类中的成员,包含成员变量和成员方法。成员方法是用来描述对成员变量进行的操作,不但定义方法,一般还要实现该方法。,类的定义,类声明的格式如下:classextendsimplements说明:(1)class是定义类的关键字,、都应该是合法的Java标识符。(2)在类的声明中必须包括关键字class和自定义的类名,而方括号中的是可选项。(3)子句extends显式地指明当前类的父类,子句implements则说明当前类要实现接口。,类的定义,类主体的定义格式如下:说明:(1)类体的数据声明为成员变量,针对数据的操作声明为成员方法,数据的操作过程在成员方法的实现中体现。(2)构造方法主要用于类对象的实例化,又称构造器。(3)类体中声明的成员变量和方法的排列顺序可以任意。,成员变量,声明类的成员变量格式如下:修饰符staticfinal数据类型成员变量名1,成员变量名2,说明:(1)修饰符的作用是限定成员变量的可访问权限,主要有public(公共的)、protected(受保护的)、private(私有的)以及缺省等四种情况(2)static用于声明类成员变量,用于保存与整个类有关的状态数据的成员变量称为静态成员变量或者类成员变量,简称为类变量,final用于声明常量;(3)成员变量的数据类型既可以是基本数据类型,也可以是引用数据类型,如数组或者其他类对象等。,成员方法,成员方法是可被调用执行并返回值的、能实现特定功能的程序段。成员方法声明格式如下:修饰符abstractstaticfinal返回值类型方法名(参数列表)throws异常类方法体说明:(1)方法的修饰符和成员变量的修饰符一样有四种情况;(2)abstract、static和final分别用于指定所声明的方法为抽象方法、静态方法和最终方法。静态方法又称类成员方法或类方法,一般用于与类有关的数据操作,可以使用类名直接调用。,成员方法,(3)成员方法执行数据操作功能后都会向调用者返回数据操作的结果,返回值类型就是用于声明该成员方法返回值结果的数据类型,可以是包括基本数据类型和引用类型在内任何合法的类型。(4)若成员方法不返回任何值,则返回值类型用void标记,不能缺省。(5)每个成员方法都有一个方法名,紧邻方法名的是用一对括号()括起来的参数列表,参数列表也称为形式参数表,简称形参表。(6)形参表主要用于声明该成员方法在被调用时需要调用者提供的、与数据操作相关的参数的个数与数据类型。每个成员方法允许声明的形参可以有0到多个,每个形参由形参数据类型、空格符和形参名组成,多个形参之间用逗号分隔,即便成员方法没有形参,括号()也不能缺省。,成员方法,(7)形参的作用域是局部的,只限于声明它的成员方法之内有效。throws用于声明该成员方法在执行过程中可能会抛出的异常类型。(8)花括号所括起来的就是方法体,方法体可以包含一到多条语句,用以实现成员方法所负责的数据操作功能。若成员方法的返回值类型不为void,则在方法体中需要使用return语句返回其数据操作的结果,且结果类型必须与方法声明的返回值类型相一致。(9)在方法体内可以局部变量,其作用域只限于声明它的方法体内,且声明中不能使用public等访问修饰符和static关键字,同时需遵循“先赋值,后使用”的原则,且在同一个类的不同方法中可以声明同名的局部变量,包括形式参数在内的所有局部变量都不能在方法体外被访问。,构造方法,构造方法的声明格式如下:()初始化的程序代码块说明:(1)一个类的构造方法可以有多个,它们都具有相同的方法名,即类名;(2)与类的成员方法不同,构造方法用于创建类的实例(即对象)并对实例的成员变量进行初始化。(3)构造方法没有返回值类型,且只能通过new运算符调用,且其修饰符一般采用public,以便于在其他位置根据需要定义并实例化该类的对象。,构造方法,(4)当一个类没有显式声明其构造方法时,Java编译器会自动为该类生成一个默认的、无参数的构造方法,且实例化后对象的成员变量在没有特别赋值的情况下自动获得其所声明类型的默认值。,对象的创建和使用,Java语言中,一个对象的生命周期经历:创建,使用,销毁等三个阶段。对象被创建后将获得包括内存在内的所需资源;而对象销毁后,其所占的资源将被系统自动回收。Java语言具有资源回收机制,能跟踪存储单元的使用情况,自动回收不再被使用的资源。创建对象时,一般先定义一个对象变量,再用new运算符实例化一个对象,格式如下:类名对象名;/声明对象变量对象名=new类名(实参列表);/实例化对象例如:C_Dateaday;aday=newC_Date();,对象的创建和使用,也可以使用下面的格式同时完成对象变量的定义与对象的实例化:类名对象名=new类名(实参列表);例如:C_Dateaday=newC_Date();说明:(1)类名是定义对象的类型,new实例化一个对象,给对象分配内存,它调用对象的构造方法,返回该对象的引用(存储对象所在的堆地址和有关信息),并将引用赋值给对象名。(2)new可以实例化类的多个不同的对象,分配不同的内存。因此,这些对象之间的状态相互独立。,对象的创建和使用,对象名获得一个实例后,在程序中就可以引用对象中的成员变量,调用对象方法,语法格式如下:对象名.成员变量对象名.成员方法(实参列表)例如:aday.year=2009;aday.setDate(2009,10,28);说明:(1)对象名与成员变量或方法之间使用点运算符“.”分隔。(2)方法调用时给出的参数称为实际参数,简称实参。实参可以是常量、变量、表达式或方法的调用,实参的个数与数据类型及排列次序一定要与类定义中该方法声明的形参保持一致,且多个实参之间用逗号分隔。,对象的创建和使用,(2)当调用方法时,系统按照实参与形参一一对应的关系将实参的值或引用传递给对应的形参。需要特别注意的是,若实参为引用类型的数据,其值不能为null。方法后的圆括号()是必需的,即便该方法没有声明形式参数也不能缺省。,对象的创建和使用,Java语言中的类是引用数据类型,两个对象之间的赋值是引用赋值,对象亦可被赋值为null,对象的引用模型如图所示。,类成员与实例成员,Java类中所包含的成员从功能上可以划分为成员变量和成员方法两种。其中,前者存储数据,后者负责数据的处理。然而,从成员与类及类实例之间的关系的上看,类中的成员还可以划分为类成员和实例成员两种。类成员是属于类的,使用static关键字声明,故又称静态成员,包括类成员变量和类成员方法。通过类名就可以直接访问类成员变量和调用类成员方法,即使没有创建对象,也能够引用类成员。当然,类成员也能够通过类的实例(即对象)进行引用。实例成员则属于类的实例(即对象),包括实例成员变量和实例成员方法。只有创建了对象之后,才能通过对象访问实例成员变量和调用实例成员方法。换句话说,实例成员只能通过类的实例进行引用,而不能为类名。,类成员与实例成员,实例成员变量和类成员变量(1)每次创建类的一个实例对象时,系统会为对象的每一个实例成员变量分配内存单元,使得属于不同对象的同一个实例成员变量具有不同值。也就是说,只有对象存在时,其实例成员变量的值才存在。(2)系统运行时为每一个类成员变量只分配一个存储单元,使得所有通过该类实例化的对象共享同一个类成员变量的存储空间。只为该类的第一个对象分配内存单元,其后所有新创建的对象都共享这一个类变量。,类成员与实例成员,例如:C_Patientp1=newC_Patient(张三,男,newC_Date(1972,10,14);C_Patientp2=newC_Patient(李四,女,newC_Date(1965,2,10);创建了两个C_Patient对象p1、p2,其实例成员变量分别占据了不同的存储单元,拥有不同的值,而类成员变量patientCount只有一个存储单元,保存着系统中由C_Patient类实例化的对象的个数。两者不同的存储结构如图所示。,类成员与实例成员,实例成员方法和类成员方法(1)实例成员方法体中既可以访问类成员变量,也可以访问实例成员变量,且只能通过对象来调用。(2)类成员方法体中只能访问类成员变量,不能访问实例成员变量。但是类成员方法既可以通过对象来调用,也可以通过类名调用。,对象数组,Java语言中的数组属于引用数据类型,而数组元素既可以是基本数据类型,也可以是引用数据类型。若数组元素为引用数据类型,如字符串、数组或类对象,则称该数组为对象数组。对象数组是Java语言用于保存多个同类对象引用的主要手段,其定义格式与普通数组类似,只是用对象类名替代数据类型即可。对象数组的初始化也需要使用new运算符获得数组元素的存储空间,用于存放数组元素(对象)的引用,对于每一个数组元素还需要使用new运算符实现对象的实例化。,对象数组,例如:C_Daterdates=newC_Date3/定义并初始化对象数组Dates0=newC_Date();/数组元素(对象)的实例化Dates1=newC_Date(1949,10,1);Dates2=newC_Date(2009,11,20);以上的操作所产生的对象数组的引用模型结构如图示。,对象0,对象1,对象2,5.2类的封装性,封装的概念访问权限修饰符方法的重载this引用类之间的组合关系,封装的概念,封装性(encapsulation)是面向对象的核心特征之一,它提供了一种信息隐藏技术。类的封装性包含两层含义:一是将数据和对数据的操作组合起来构成类,类是一个不可分割的独立单位;二是类中既要提供与外部联系的方法,同时又要尽可能隐藏类的实现细节和保护自身数据的安全性。类封装的概念可以用集成电路芯片作为类比。一块集成电路芯片由陶瓷封装起来,其内部电路是不可见的,也是使用者不关心的。芯片的使用者只关心芯片的引脚的个数、引脚的电量参数以及引脚提供的功能,通过这些引脚,硬件工程师对这个芯片有了全面的了解。硬件工程师将不同芯片的引脚连在一起,就可以组成一个具有一定功能的产品。,访问权限修饰符,Java语言通过设置类的访问权限和类中成员的访问权限来实现类的封装特性的。在Java语言中,类的访问权限修饰符只有:默认的(缺省)和公有的(public)两种,而类的成员(成员变量和成员方法)的访问权限修饰符却有:公有的(public)、保护的(protected)、默认的(缺省)和私有的(private)等四种。,访问权限修饰符,当设置类成员的访问权限时,四种访问权限修饰方式的含义如下:公有的(public):说明该类成员可被所有类的对象使用。保护的(protected):说明该类成员能被同一类中的其他成员、或其子类成员、或同一包中的其他类访问,不能被其他包的非子类访问。默认的(缺省):如果在声明一个成员时,成员前面缺省了修饰符,则该类成员能被同一类中的其他成员、或同一包中的其他类访问,但不能被其他包的类访问。私有的(private):说明该类成员只能被同一类中的其他成员访问,不能被其他类的成员访问,也不能被子类成员访问。,方法的重载,若一个类中包含有许多带有不同的参数列表的同名方法,则称为方法的重载(Overload)。例如:在Java定义的数学类Math中,abs()方法返回一个数的绝对值,参数类型不同,则返回值类型也不同。参数的数据类型有四种,Math.abs()方法声明也有四种。staticintabs(inta)staticlongabs(longa)staticfloatabs(floata)staticdoubleabs(doublea)虽然Math.abs()方法有多种声明形式,但都表示相同含义,这就是重载的价值所在。,方法的重载,Java语言中,方法的重载既可以是成员方法,也可以是构造方法。重载的多个方法之间必须能通过参数列表相区别,且满足以下两个条件:参数列表必须不同,即以不同的参数个数、参数类型、参数的次序来区别重载的方法。参数个数不同,或者参数个数相同但类型不同或类型的次序不同都视为不同的参数列表,与具体的参数名是否相同没有关系。返回值类型可以相同,也可以不同。程序运行时,究竟执行重载方法中的哪一个,取决于调用该方法的实际参数的个数和参数的数据类型。系统执行时调用与实际参数相匹配的重载的方法。为了程序的可读性,建议最好重载相同含义的方法。,this引用,在Java类的方法体内,程序可以根据需要声明局部变量,且局部变量允许与类的成员变量出现同名的情况,那么如何在方法体内区别对待成员变量与局部变量的访问呢?为了解决这个问题,Java语言专门提供了关键字this,其表示指向当前对象的一个引用型变量。通过this可以引用当前对象的成员变量或者调用当前对象的成员方法。语法格式如下:this.成员变量this.成员方法(参数列表),this引用,说明:(1)由于this用于表示指向当前对象的引用,所以它不能在类成员方法(类方法)中使用,只能出现在实例成员方法中。(2)在类的方法体中,如出现形参或局部变量与成员变量同名的情况,系统默认的是形参或局部变量,若需要访问成员变量,则只能使用this来引用。(3)在没有以上同名情况的时候,对于当前对象的成员变量和成员方法的访问可以省略this引用。(4)this引用还可以用在重载的构造方法中,以调用本类已定义的构造方法。语法格式如下:this(参数列表)(5)在构造方法中,this()引用必须是第一行语句。,类之间的组合关系,Java语言中的类与类之间主要存在两种关系,即“组合”与“继承”。所谓的类与类之间的组合关系是指在一个类的成员变量中包含了其他类的对象。与类中基本数据类型的成员变量不同,一个类组合中包含的其他类的对象需要使用new运算符显式创建,编译器不会自动完成这个操作。一般情况下,初始化组合中的对象可遵循如下原则:(1)在对象定义的时候。(2)在包含它的那个类的构造方法中。(3)紧靠在要求实际使用那个对象之前。,5.3类的继承性,继承的概念子类的定义super引用抽象类与最终类内部类*,继承的概念,继承性(Inheritance)是面向对象的核心特征之一,它是一种由已有的类创建新类的机制,也是一种自动实现类中方法和数据共享的机制。由一个已有的类定义一个新类,称为新类继承(inherit)已有的类,被继承的类称为父类或超类,通过继承产生的新类称为子类或派生类。继承性在父类与子类之间建立起了联系,子类自动拥有了父类的全部成员,包括成员变量和成员方法,使父类成员得以传承和延续。子类可以更改父类的成员,使之适应或满足新的需求;子类也可以增加属于自己的新的成员,使其功能得以扩展。子类不能删除父类的成员,继承的概念,Java语言只提供了类的单重继承方式,父类与子类之间存在一对多的关系,即一个子类只能有一个父类,而一个父类可以有多个子类,且每个子类又可以作为父类有自己的子类。由此形成具有树形结构的类的层次体系,其中具有继承关系的、相距多个层次的类之间称为祖先类与后代类。,继承的概念,Java语言中,类的继承性包括以下基本原则子类可以继承父类的实例成员变量和类成员变量。子类可以继承父类的实例成员方法和类成员方法。子类不能继承父类的构造方法,因为父类构造方法创建的是父类对象,子类必须声明自己的构造方法,创建子类自己的对象。子类可以增加自己的成员变量和成员方法。如果子类声明了和父类同名的成员,则不能继承父类的成员,此时子类的成员隐藏了父类的成员。子类可以重新定义父类成员。子类能够继承父类的析构方法。子类不能删除父类成员。,【案例5-2】基于医生类继承性定义外科医生类,以外科医生类父类建立一牙科医生类,案例说明本案例为了全面揭示Java语言类的继承性的基本概念、特点与应用方法,以案例5-1中的医生类为父类定义了一个外科医生类,并同时定义了外科医生类的子类-牙科医生类(编者认为牙科也主要以牙科手术为诊疗手段)。,图5-7案例5-2运行结果,子类的定义,在类的声明中,通过使用关键字extends来定义一个类的子类。子类声明格式如下:classextendsimplements例如classC_SurgeonextendsC_Doctor说明:(1)Java语言只支持单重继承,因此父类名只能有一个,且必须是在当前编译单元中可以访问的类,否则会产生编译错误。(2)Java语言中的类具有树形结构的层次体系,Object类是这个树形结构的根类,即Object类是其他类的父类或祖先类。,子类的定义,子类与父类之间的赋值相容性继承性具有“即是”性质:子类对象即是父类对象,反之则不然。使用对象运算符instnceof可以判定一个对象是否属于指定类及其子类。例如C_Doctord1=newC_Doctor(张三,男);C_Surgeons1=newC_Surgeon(李四,女);d1instanceofC_Doctor/返回true,d1是C_Doctor类对象s1instanceofC_Surgeon/返回true,s1是C_Surgeon类对象s1instanceofC_Doctor/返回true,子类对象即是父类对象d1instanceofC_Surgeon/返回false,父类对象不是子类对象C_Doctord1=newC_Surgeon(“李四”,“女”);/赋值相容C_Surgeons1=newC_Doctor(张三,男);/赋值不相容,子类的定义,子类对象对父类成员的访问权限子类对父类中定义为private的私有成员没有访问权限。子类可以访问父类中定义为public(公共的)和protected(受保护的)的成员。子类对父类缺省权限成员的访问分两种情况,对同一包中父类的缺省权限的成员可以访问,不同包中的不能访问。类中成员的访问权限体现了类封装的信息屏蔽原则(1)如果类中成员仅限于该类自己用,则声明为private;(2)如果类中成员允许子类使用,则声明为protected;(3)如果类中成员没有权限限制,所有的类均可使用,则声明为public。,子类的定义,子类重定义从父类继承来的成员子类继承了父类的成员变量和成员方法;子类不能继承父类的构造方法,所以在子类中一般都需要重新定义自己的构造方法。如果从父类继承来的成员不适合于子类,子类不能删除它们,但可以重定义它们,扩充父类成员方法的功能,使父类成员能够适应子类新的需求。子类重定义父类成员,Java语言对类成员的处理原则是:从对象所属的类开始,寻找匹配的成员,如果当前类中没有匹配的成员,则逐层向上依次在父类或祖先类中寻找匹配的成员,直到Object类。因此,在子类重定义父类成员的情况下,父类对象引用父类成员,子类对象引用子类成员。,子类的定义,子类重定义父类成员有以下3种情况:子类隐藏父类成员变量如果子类重定义父类的同名成员变量,则称子类隐藏了父类的成员变量。在父类中通过this引用的是父类的成员变量,在子类中通过this引用的是子类的成员变量。子类覆盖父类成员方法如果子类重定义父类的同名成员方法,当子类方法的参数列表与父类的参数列表完全相同时,则称子类成员方法覆盖了父类成员方法,此时,父类对象自动调用父类成员方法,子类对象自动调用子类的成员方法。需要注意的是:子类覆盖父类中同名方法时,子类方法声明必须与父类被覆盖方法的声明保持一致,且子类不能覆盖父类中声明为final或static的方法。,子类的定义,子类重定义父类成员有以下3种情况:子类继承并重载父类的成员方法如果子类重定义父类的同名成员方法,当子类方法的参数列表与父类方法的参数列表不同时,则子类继承了父类的成员方法,并重载了继承来的该同名成员方法。所以,此时子类中有两个(或以上)重载的同名成员方法,参数列表不同。,super引用,super和this有些类似,它是指向父类对象的一个引用型变量,或者说super表示的是当前对象的直接父类对象的引用super引用主要有以下2种用法:1调用父类的构造方法子类不能继承父类的构造方法,但在子类的构造方法体内可以使用super调用父类的构造方法。其语法格式如下:super(参数列表)与this的使用一样,在构造方法中,super()引用必须是第一行语句。,super引用,2引用父类同名成员子类自动继承父类的成员,当子类没有重定义父类成员时,则不存在同名成员问题。子类对象访问的都是父类声明的成员变量,调用的也是父类定义的成员方法,所以不需要使用super引用。当子类重定义了父类成员时,在子类方法体中,成员变量和成员方法均默认为子类的成员变量和成员方法。如果需要引用父类的同名成员,则需要使用super引用。其访问父类同名成员变量和成员方法的语法格式如下:super.成员变量super.成员方法(参数列表)当子类成员方法仅重载而没有覆盖父类同名成员方法时,重载的多个成员方法之间能够通过调用时的实际参数来相互区别,不需要使用super引用。,抽象类,抽象类使用关键字abstract声明的类称为抽象类,使用abstract声明的方法称为抽象方法。抽象类通常包含抽象方法,抽象方法是一种仅有方法声明而没有方法体的成员方法。例如:publicabstractclassC_TopDoctorpublicabstractvoidtreat();说明:(1)抽象类中可以不包含抽象方法,但是包含抽象方法的类必须声明为抽象类。,抽象类,(2)类的构造方法和静态方法(类成员方法)不能被声明为抽象方法。(3)抽象类不能被实例化,即便抽象类中没有包含抽象方法,也不能创建抽象类的实例。(4)抽象方法的声明中不能使用static或final关键字。(5)由于抽象方法在抽象类中没有具体的方法实现,所以抽象方法必须被子类覆盖。(6)如果一个子类不能覆盖父类的抽象方法,则该类自己也必须声明为抽象类。,最终类,最终类就是用关键字final声明的类例如:publicfinalclassdentistextendsC_Surgeonfinalvoidexodontia()/拔牙手术.说明:(1)如果想保护类中的方法不被子类覆盖,可以在声明中用关键字final来声明这个方法为最终方法。(2)最终类与最终方法之间没有任何联系,最终类可以不包含最终方法,非最终类也可以包含最终方法。,内部类,类与类之间除了继承关系,还存在嵌套关系,即一个类可以声明包含另一个类,被包含的类称为内部类(InnerClass),而包含内部类的类称为外部类。根据内部类声明的位置及修饰符的不同,内部类有很多不同的形式,最直观的一种内部类就是成员类,它与外部类的成员变量的地位相似。,classC_PatientProtectedclassCIn_Date/内部成员类privateintyear;/年privateintmonth=1;/月privateintday=1;/日.publicstaticintpatientCount;/人数病人Stringname;/病人姓名Stringsex;/性别privateCIn_Datebirthday;/出生日期doubletemperature;/体温Stringprescription;/处方.说明:(1)内部成员类的全名为:包名.外部类名.内部类名;(2)内部成员类既有类的特性,也有类中成员的特性。,内部类,内部成员类的类特性:内部成员类不能与外部类同名。内部成员类具有封装性。内部成员类中可以声明成员变量和成员方法,通过创建内部成员类的对象,可以引用其成员变量和成员方法。内部成员类的成员可以与外部类的成员同名。内部成员类具有继承性,可以声明内部成员类继承指定父类或实现指定接口,也可以被其他内部成员类继承。请注意:内部成员类与其所属的外部类之间只存在结构上的嵌套关系,不存在任何形式的继承关系。内部成员类具有抽象性,可以声明内部成员类为抽象类,但该抽象类必须被其他内部成员类继承;可以声明内部成员类为内部接口,但该内部接口必须被其他内部成员类实现。,内部类,内部成员类的成员特性:内部成员类定义中可以使用private、缺省、protected、public等类中成员声明时使用的4种访问权限修饰符。可以使用static声明内部成员类为外部类的类成员,此时该内部成员类称为静态内部成员类。静态内部成员类与外部类中的静态成员变量(类变量)相似,它只与外部类相关而不依赖外部类的实例。因此,静态内部成员类是顶层类,它没有父类,而且不能引用外部类的实例成员。只有静态内部成员类中才能声明静态(static)成员,且创建一个静态内部成员类的对象并不需要一个外部类对象的存在。对于非静态内部成员类,在其方法体中可以访问外部类中的静态和实例成员,即使这些成员被声明为private型的也不例外。非静态内部成员类中不允许声明静态(static)成员。,5.4接口,接口的概念声明接口实现接口接口对象,接口的概念,接口主要用于描述某一行为功能所包含的行为方法的基本概况,即方法的名称、返回值类型以及形式参数列表等,从而实现对不同实体对象类的行为功能的标准化。接口是一组常量和抽象方法的集合。一个类具有某一接口约定的行为功能,只需要在类定义时声明实现该接口并在类体中完成接口中抽象方法的覆盖即可。一个类可以实现多个接口,一个接口同样可以被多个不同的类实现。接口提供了方法声明与方法实现相分离的机制,使多个类之间表现出共同的行为功能。接口中声明的抽象方法约定了多个类共用的方法声明,每个实现接口的类可以根据自身的实际情况,给出抽象方法的具体实现。,接口的概念,【案例5-3】基于手术接口声明骨外科医生类和肝胆外科医生类。,案例说明本案例为了对所有外科手术的过程进行标准化,声明了手术接口I_Surgery,其中包含有3个抽象方法和一个用于显示医疗风险系数等级的常量。骨外科医生的定义中声明实现手术接口,而肝胆外科医生的定义继承与外科医生类(C_Surgeon),同时声明实现手术接口。,声明接口,接口的声明类似于类的声明,它由接口声明和接口体两部分组成。其具体的语法形式如下:interfaceextends声明常量1;声明常量2;声明方法1;声明方法2;说明(1)修饰符只有两种情况:public或省略修饰符,如果接口声明为public,则接口中的常量和方法全部为public。,声明接口,(2)一个接口可以继承其他接口,子接口继承父接口中所有的常量和方法。(3)接口中定义的常量,即符号常量,全部隐含为final和static,所以不需要在声明常量时加final和static修饰符。(4)接口中的方法都是public权限的抽象方法,仅需给出方法声明的方法头,不需要给出方法体,且public与abstract保留字可以缺省。(5)从接口体的形式上看,接口类似一个完全抽象的类,但它不是一个类,因为抽象类中除了抽象方法外,还可能有成员变量;同样,即便一个类中所有的方法都是抽象的,它也不是一个接口。,实现接口,接口不能用new运算符来直接创建一个实例,但是可以利用接口的特性来构造新的类,这个过程称为接口的实现。接口的实现类似于类的继承,只是不用ex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石河子大学《应急人力资源管理》2022-2023学年第一学期期末试卷
- 物业智能化解决方案
- 石河子大学《数学文化赏析》2021-2022学年第一学期期末试卷
- 石河子大学《口腔颌面外科学》2022-2023学年第一学期期末试卷
- 石河子大学《工程热力学与传热学》2023-2024学年第一学期期末试卷
- 精神科新冠肺炎演练
- 沈阳理工大学《数学建模》2023-2024学年第一学期期末试卷
- 沈阳理工大学《液压与气动技术》2022-2023学年第一学期期末试卷
- 沈阳理工大学《电气控制与PC技术》2022-2023学年期末试卷
- 沈阳理工大学《场地设计》2021-2022学年第一学期期末试卷
- 最新《辅酶q10》课件
- 西方医学史概要课件
- 分布式光伏屋顶调查表
- 新中国十大元帅!课件
- SAP成本核算与成本控制课件
- 幼儿园小朋友认识医生和护士课件
- 2022年消防安全知识考试题库及答案
- 石化项目设备及管道防腐保温施工方案
- Unit 1 Food comments 课件-高中英语外研版(2019)必修第二册
- 国开成本会计第13章综合练习试题及答案
- 2022年乌鲁木齐市法院书记员招聘考试题库及答案解析
评论
0/150
提交评论