 
         
         
         
         
        版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第4章章 Java面对对象的程序设计二面对对象的程序设计二学习导读学习导读n本章讨论面向对象的编程OOP及其关键技术:承继和多态、接口、包。n承继性是软件复用的一种方式,对降低软件复杂性行之有效。承继性同时是面向对象程序设计言语的特点,采用对象但没有承继性的言语是基于对象的言语,但不是面向对象的言语,这是两者的区别。n多态性允许以一致的风格处置已存在的变量及相关的类,使添加系统中新功能变得容易。5.1 承继的概念承继性是面向对象程序设计言语的最主要的特承继性是面向对象程序设计言语的最主要的特点,是其他言语如面向过程言语所没有的。点,是其他言语如面向过程言语所没有的。 类之间的承继关系是现实世
2、界中遗传关系的直类之间的承继关系是现实世界中遗传关系的直接模拟,它表示类之间的内在联络以及对属性接模拟,它表示类之间的内在联络以及对属性和操作的共享,即子类可以沿用父类被承继和操作的共享,即子类可以沿用父类被承继类的某些特征。当然,子类也可以具有本人类的某些特征。当然,子类也可以具有本人独立的属性和操作。独立的属性和操作。承继5.1 承继的概念n承继定义承继定义n 承继性是软件复用的一种方式。新类承继性是软件复用的一种方式。新类由已存在的类生成,经过保管它们的属性由已存在的类生成,经过保管它们的属性和行为,并且根据新类的要求对性能加以和行为,并且根据新类的要求对性能加以修正,添加新的属性和行为
3、。修正,添加新的属性和行为。n假设子类只从一个父类承继,那么称为单假设子类只从一个父类承继,那么称为单承继;假设子类从一个以上父类承继,那承继;假设子类从一个以上父类承继,那么称为多承继。留意么称为多承继。留意 Java Java不支持多重承继,不支持多重承继,但它支持但它支持“接口概念。接口使接口概念。接口使JavaJava获得获得了多重承继的许多优点,摒弃了相应的缺了多重承继的许多优点,摒弃了相应的缺陷。陷。5.2 扩展类n1 1 承继关系定义承继关系定义 父类名跟在父类名跟在extends 关键字后面,用来阐明关键字后面,用来阐明当前类是哪个曾经存在当前类是哪个曾经存在类的子类,存在承继
4、关类的子类,存在承继关系。系。 定义定义 雇员类雇员类 Employee 的两个子类:的两个子类:普通雇员类普通雇员类:CommonEmployee 主主 管管 类类:ManagerEmployee子类从父类承继有子类从父类承继有两个主要的方面:两个主要的方面:1属性的承继。属性的承继。例如,公司是一个例如,公司是一个父类,一个公司有父类,一个公司有称号、地址、经理、称号、地址、经理、雇员等,这些都属雇员等,这些都属于构造方面。于构造方面。2方法的承继。方法的承继。一个父类定义了假一个父类定义了假设干操作,如一个设干操作,如一个公司要有工程、利公司要有工程、利润、任命经理、录润、任命经理、录用
5、职工等操作,子用职工等操作,子公司也将承继这些公司也将承继这些行为。行为。5.2 扩展类nclass CommonEmployee extends Employee 子类1: nn int m_ManagerNo ;定义类属性m _ManagerNo,代表雇员上司的编号nnclass ManagerEmployee extends Employee 子类2:nn int m_SecretaryNo; 定义类属性m_SecretaryNo,代表秘书的编号n声明类头声明类头-父类名父类名两个子类两个子类5.2 扩展类n2 2 属性承继与隐藏属性承继与隐藏n虽然虽然EmployeeEmployee类
6、是一个父类,但是并不由于它类是一个父类,但是并不由于它是父类就意味着它有更多的功能。恰恰相反,子是父类就意味着它有更多的功能。恰恰相反,子类比它们的父类具有更多的功能。由于子类是父类比它们的父类具有更多的功能。由于子类是父类的扩展,添加了父类没有的属性和方法类的扩展,添加了父类没有的属性和方法n1 1子类不能访问父类的子类不能访问父类的privateprivate成员,但子成员,但子类可以访问其父类的类可以访问其父类的publicpublic,n2 2protectedprotected访问是访问是publicpublic和和privateprivate访问之访问之间一个维护性的中间层次。间一
7、个维护性的中间层次。n3 3由于被承继的父类成员没有在子类声明中由于被承继的父类成员没有在子类声明中列出,但是这些成员确实存在于子类中。列出,但是这些成员确实存在于子类中。5.2 扩展类n3 方法承继、覆盖与重载方法承继、覆盖与重载n1)方法承继方法承继n对于子类对象,可以运用父类中的方法。即使对于子类对象,可以运用父类中的方法。即使这些方法没有明显地在子类中定义,它们也自动这些方法没有明显地在子类中定义,它们也自动地从父类中承继过来了。地从父类中承继过来了。n2)方法覆盖方法覆盖n方法的覆盖是指:子类定义同名方法来覆盖父方法的覆盖是指:子类定义同名方法来覆盖父类的方法,是多态技术的一个实现。
8、当父类方法类的方法,是多态技术的一个实现。当父类方法在子类中被覆盖时,通常是子类版本调用父类版在子类中被覆盖时,通常是子类版本调用父类版本,并做一些附加的任务。本,并做一些附加的任务。n见例见例5.1 例例5.25.2 扩展类n关于覆盖应留意的事项关于覆盖应留意的事项n1、方法覆盖中,子类在重新定义父类已有的方、方法覆盖中,子类在重新定义父类已有的方法时,应坚持与父类完全一样的方法头声明,即法时,应坚持与父类完全一样的方法头声明,即与父类完全一样的方法名、前往值和参数列表。与父类完全一样的方法名、前往值和参数列表。n2、子类可以添加字段,也可以添加方法或者覆、子类可以添加字段,也可以添加方法或
9、者覆盖父类中的方法。然而,承继不能去除父类中的盖父类中的方法。然而,承继不能去除父类中的任何字段和方法。任何字段和方法。n3、留意方法覆盖中的、留意方法覆盖中的this和和supern见下页:见下页:5.2 扩展类nthis和和supern1、this表示的是当前对象本身,表示的是当前对象本身,this代表当前对代表当前对象的一个援用。可以了解为对象的另一个名字。象的一个援用。可以了解为对象的另一个名字。利用利用this可以调用当前对象的方法和属性。可以调用当前对象的方法和属性。n如:如:this.getName和和getName在类中是在类中是一样的。见例一样的。见例1this的运用的运用n
10、2、super表示的是当前对象的直接父类对象,表示的是当前对象的直接父类对象,是当前对象的父类对象的援用。见例是当前对象的父类对象的援用。见例2 super的运的运用用5.2 扩展类3 3方法重载方法重载重载的定义:可以用一样的方法名但不同的参数重载的定义:可以用一样的方法名但不同的参数表来定义方法参数表中参数的数量、类型或次表来定义方法参数表中参数的数量、类型或次序有差别,这称为方法重载。序有差别,这称为方法重载。重载重载overloadingoverloading:当多个方法具有一样的:当多个方法具有一样的名字而含有不同的参数时,便发生重载。编译器名字而含有不同的参数时,便发生重载。编译器
11、必需挑选处调用哪个方法。它经过将在不同方法必需挑选处调用哪个方法。它经过将在不同方法头部中的参数类型和在特定的方法调用中运用值头部中的参数类型和在特定的方法调用中运用值的类型进展比较,从而挑选出正确的方法。的类型进展比较,从而挑选出正确的方法。 5.2 扩展类n4 4 在子类中运用构造函数在子类中运用构造函数n关于子类构造函数的规律总结如下:关于子类构造函数的规律总结如下:n1 1子类构造函数总是先调用显式的或隐式子类构造函数总是先调用显式的或隐式地其父类的构造函数,以创建和初始化子类的地其父类的构造函数,以创建和初始化子类的父类成员。父类成员。n2 2构造函数不能承继,它们只属于定义它们构造
12、函数不能承继,它们只属于定义它们的类。的类。n3 3当创建一个子类对象时,子类构造函数首当创建一个子类对象时,子类构造函数首先调用父类的构造函数并执行,接着才执行子类先调用父类的构造函数并执行,接着才执行子类构造函数构造函数5.2 扩展类n5 5 父类对象与子类对象的关系父类对象与子类对象的关系n1 1、子类对象可以被视为是其父类的一个对象;、子类对象可以被视为是其父类的一个对象;n2 2、父类对象不可被当作某个子类的对象;、父类对象不可被当作某个子类的对象;n3 3、假设一个方法的方式参数定义的是父类对象,、假设一个方法的方式参数定义的是父类对象,那么调用这个方法时可以运用子类对象作为实践那
13、么调用这个方法时可以运用子类对象作为实践参数参数n4 4、假设父类对象援用指向的实践是一个子类对、假设父类对象援用指向的实践是一个子类对象,那么父类对象的援用可以强迫类型转换为子象,那么父类对象的援用可以强迫类型转换为子类对象的援用类对象的援用n例:例:Employee eEmployee eEmployeeManager5.2 扩展类n5 5 父类对象与子类对象的关系父类对象与子类对象的关系n调用过程:调用过程:e. getSalarye. getSalaryn程序会选择正确的程序会选择正确的getSalarygetSalary方法。留意虽然方法。留意虽然e e的声明类的声明类型是型是Emp
14、loyee.Employee.n当当e e指向一个指向一个EmployeeEmployee对象时,对象时,e.getSalary()e.getSalary()会调用会调用EmployeeEmployee类中的类中的getSalarygetSalary方法;而当方法;而当e e指向一个指向一个ManagerManager对象时,对象时,getSalary()getSalary()方法就变成了方法就变成了ManagerManager类的类的getSalary()getSalary()方法。虚拟机知道方法。虚拟机知道e e所指对象的实践类型,所指对象的实践类型,因此它会调用正确的方法。因此它会调用正
15、确的方法。n现实上,一个对象变量如现实上,一个对象变量如e e可以指向多种实践类型可以指向多种实践类型这种景象称为这种景象称为“多态。在运转时自动选择正确的方法多态。在运转时自动选择正确的方法进展调用称作动态绑定。进展调用称作动态绑定。5.2 扩展类n6 6 扩展类承继的运用示范扩展类承继的运用示范n如今讨论一个承继性的详细例子,点、圆的层次构造。如今讨论一个承继性的详细例子,点、圆的层次构造。首先建立并运用首先建立并运用PointPoint类,然后从类,然后从pointpoint类承继产生类承继产生CircleCircle类。见例类。见例3 3n程序的模块:程序的模块:n1 1模块模块1 1
16、:程序定义了一个:程序定义了一个PointPoint类;类; n2 2模块模块2 2:又定义了:又定义了CircleCircle类,它是从类,它是从PointPoint类承继类承继来的;来的;n3 3运用程序,该程序演示了如何把子类援用指定为运用程序,该程序演示了如何把子类援用指定为父类援用,以及把父类援用强迫转换为子类援用,留意父类援用,以及把父类援用强迫转换为子类援用,留意当当p p添加到添加到stringstring时对时对toStringtoString的隐式调用的隐式调用5.2 扩展类用来完成这个效果的两项关键编程技术是:1创建Circle类承继了Point类。2在Point类和Ci
17、rcle类中用完全一样的覆盖toString方法。值得强调的是以下几点:1Java将隐式地把Object类java.lang包作为新定义类的父类。Object类提供了一套任何类的任何对象均可运用的方法。2子类构造函数总是先调用显式的或隐式地其父类的构造函数,以创建和初始化子类的父类成员;构造函数不能承继,它们只属于定义它们的类。3父类的实例变量可用Protected限定,因此,从Point衍生Circle类时,Circle类的方法能直接援用坐标x和y,而不用运用访问。5.3 多态与动态绑定多态Polymorphism提高了程序可扩展性,调用多态性行为的软件传送给对象的音讯即方法调用与对象的类型
18、无关,因此能呼应已有音讯的新类型可以直接参与系统,而不用修正根本系统。在运转时自动选择正确的方法进展调用称作动态绑定dynamic binding。在编译时可以选择正确的方法进展调用称作静态绑定static binding5.3 多态与动态绑定n1 1 多态多态n对于数据来说,承继能否为正确的设计可以用对于数据来说,承继能否为正确的设计可以用一个简单的规那么来判别。一个简单的规那么来判别。“is-a“is-a规那么阐规那么阐明子类的每一个对象都是一个超类的对象。例明子类的每一个对象都是一个超类的对象。例如,每一个经理是一个员工。然而,只需经理如,每一个经理是一个员工。然而,只需经理类是员工类的
19、子类才是有意义的。很明显,反类是员工类的子类才是有意义的。很明显,反过来就不行了过来就不行了并不是每个员工都是经理。并不是每个员工都是经理。n 还有一个明确表达还有一个明确表达“is-a“is-a规那么的方法规那么的方法是替代原那么。该原那么规定无论何时,假设是替代原那么。该原那么规定无论何时,假设程序需求一个超类对象,都可以用一个子类对程序需求一个超类对象,都可以用一个子类对象来替代象来替代5.3 多态与动态绑定n2 2 动态绑定动态绑定n了解调用一个对象方法的机制是非常重要的。下面详了解调用一个对象方法的机制是非常重要的。下面详细引见:细引见:X.fX.f;n1 1编译器检查对象的声明类型
20、和方法名。编译器检查对象的声明类型和方法名。n2 2接着,编译器检查方法调用中的参数类型。假设接着,编译器检查方法调用中的参数类型。假设在一切的叫做在一切的叫做f f的方法中有一个其参数类型同调用提供的方法中有一个其参数类型同调用提供的参数类型最匹配,那么该方法就会被选择调用。这的参数类型最匹配,那么该方法就会被选择调用。这个过程称作超载选择。静态个过程称作超载选择。静态n3 3当程序运转并且运用动态绑定来调用一个方法时,当程序运转并且运用动态绑定来调用一个方法时,那么虚拟机必需调用同那么虚拟机必需调用同x x所指向的对象的实践类型相匹所指向的对象的实践类型相匹配的方法版本。配的方法版本。动态
21、绑定是非常重要的特性:它能使程序变得可扩展而无需重编译已存代码。5.3 多态与动态绑定n例例n见书见书P84P84例例5 5。4 4和例和例5 5。5 55.4 构造函数的承继与重载n构造函数的作用是来定义对象的初始形状。然而由于对象的构造如此重要,Java还另外提供了一些不同的机制来编写构造函数n默许属性初始化n假设在构造函数中没有明确地给某个属性赋值,那么此字段会被自动地赋值以一个默许值:假设是数字那么被赋值以0,假设是布尔类型那么被赋值以false,假设是对象援用那么被赋值以null。但运用默许值被以为是一种糟糕的编程做法。由于,假设字段以不可见的方式被初始化会使得他人很难读懂程序。5.
22、4 构造函数的承继与重载默许构造函数默许构造函数默许构造函数是指没有参数的构造函数这种构造函默许构造函数是指没有参数的构造函数这种构造函数有时也称作无参数构造函数。例如,下面是数有时也称作无参数构造函数。例如,下面是个个EmployeeEmployee类的默许构造函数:类的默许构造函数:public Employee()public Employee() name=name=; ;salary=0;salary=0;hireDay=new Date();hireDay=new Date(); 假设编写了一个没有构造函数的类,那么系统会自动假设编写了一个没有构造函数的类,那么系统会自动为此类提供
23、一个默许构造函数。此默许构造函数将一为此类提供一个默许构造函数。此默许构造函数将一切的实例字段初始化为默许值。切的实例字段初始化为默许值。 5.4 构造函数的承继与重载n3 3 显式属性初始化显式属性初始化n由于在类中可以重载构造函数方法,所以可以采用多由于在类中可以重载构造函数方法,所以可以采用多种方式来设置类中实例属性的初始形状不论什么样的种方式来设置类中实例属性的初始形状不论什么样的构造函数调用,确保每个实例字段都被设置为某个有构造函数调用,确保每个实例字段都被设置为某个有意义的值是一种很好的习惯。意义的值是一种很好的习惯。n 在类的定义中,可以简单地把一个值赋值给任在类的定义中,可以简
24、单地把一个值赋值给任何字段。例如,何字段。例如,nprivate String name=private String name=lilililin 在执行构造函数前,此赋值会被执行。当类中一切在执行构造函数前,此赋值会被执行。当类中一切的构造函数都需求把某一特定的实例字段赋值以一样的构造函数都需求把某一特定的实例字段赋值以一样的值时,此语法非常有用的值时,此语法非常有用5.4 构造函数的承继与重载参数名参数名当编写小的构造函数时当编写小的构造函数时, ,普通选择单个字母作为参数普通选择单个字母作为参数名。名。public Employee(String n,double s)public E
25、mployee(String n,double s) name=n; name=n; salary=s salary=s; 然而,这么做的缺陷是需求阅读代码才干知道参数然而,这么做的缺陷是需求阅读代码才干知道参数n n和和s s表示的是什么。表示的是什么。5.4 构造函数的承继与重载n5 5 构造函数重载构造函数重载n在一个类中可以定义多个构造函数以满足不同在一个类中可以定义多个构造函数以满足不同的对象实例的初始化情况,这些构造函数经过的对象实例的初始化情况,这些构造函数经过不同的参数列表来区分。不同的参数列表来区分。nPublic Employee(String n)Public Emplo
26、yee(String n)n npublic Employee(String n,double s)public Employee(String n,double s)n nPublic Employee(String n,double s,int Public Employee(String n,double s,int ayear,int amonth,int aday)ayear,int amonth,int aday)n 5.4 构造函数的承继与重载n6 6 调用另一个构造函数调用另一个构造函数n关键字关键字thisthis指向隐式参数。此外,此关键字还有另一指向隐式参数。此外,此关键
27、字还有另一种含义。假设构造函数第一个语句具有方式种含义。假设构造函数第一个语句具有方式this()this(),那么此构造函数调用此类中的另一个构,那么此构造函数调用此类中的另一个构造函数。下面是一个典型的实例:造函数。下面是一个典型的实例:nPublic Employee(String,double)Public Employee(String,double)n npublic Employee(double s)public Employee(double s)n n/calls Employee(String/calls Employee(String,double)double)nth
28、is(“Employee #this(“Employee #+nextId+nextId,s);s);nnextId+;nextId+;n 5.4 构造函数的承继与重载调用父类的构造函数调用父类的构造函数关键字关键字supersuper指向当前类的直接父类对象。此外,此指向当前类的直接父类对象。此外,此关键字还有另一种含义。假设构造函数第一个语句具关键字还有另一种含义。假设构造函数第一个语句具有方式有方式this()this(),那么此构造函数调用此类的直接,那么此构造函数调用此类的直接父类中的另一个构造函数。:父类中的另一个构造函数。:Public Employee(String,doubl
29、e)Public Employee(String,double)/处于类处于类EmployeeEmployee中中public Manager(double s)/public Manager(double s)/处于类处于类ManagerManager中,为中,为EmployeeEmployee的子类的子类 /calls Employee(String/calls Employee(String,double)in calss double)in calss EmployeeEmployeesuper(“Employee #super(“Employee #+nextId+nextId,s)
30、;s);nextId+;nextId+; 5.5 包n1 1 包用途包用途nJavaJava允许把多个类搜集在一同成为一组,称作允许把多个类搜集在一同成为一组,称作包包packagepackage。包便于组织义务,以及使本。包便于组织义务,以及使本人的义务和其他人提供的代码库相分别。人的义务和其他人提供的代码库相分别。n 规范规范JavaJava库被分类成许多的包,其中包括库被分类成许多的包,其中包括java.1angjava.1ang、java.utiljava.util和和javajava等等。规范等等。规范JavaJava包是分层次的。就像在硬盘上嵌套有各级子目包是分层次的。就像在硬盘上
31、嵌套有各级子目录一样,可以经过层次嵌套组织包。一切的录一样,可以经过层次嵌套组织包。一切的JavaJava包都在包都在JavaJava和和JavaxJavax包层次内包层次内5.5 包n2 2 创建包创建包n曾经看到,已有的库,比如曾经看到,已有的库,比如Java APIJava API中的类和接口,可中的类和接口,可以导入到以导入到JavaJava程序中。程序中。nJava APIJava API中的每一个类和接口属于一个特定的包。它包中的每一个类和接口属于一个特定的包。它包含一组相关联的类和接口,实践是对类和接口进展组织含一组相关联的类和接口,实践是对类和接口进展组织的目录构造。的目录构造
32、。n例如,假定文件名是例如,假定文件名是MyClass.javaMyClass.java。它意味着在那个。它意味着在那个文件有一个、而且只能有一个文件有一个、而且只能有一个publicpublic类。而且那个类的类。而且那个类的名字必需是名字必需是MyClassMyClass包括大小写方式:包括大小写方式:npackage mypackage;package mypackage;npublic class MyClasspublic class MyClassn nn n n nn 5.5 包创建可复用的类的步骤简要阐明如下:1定义一个public类。假设类不是public,它只能被同一包中的
33、其他类运用。2选择一个包名,并把package语句加到可复用的类的源代码文件中。3编译这个类。这样,它就被放到适当的包目录构造中,以供编译器和解译器运用。4把这个可复用的类导入到需求用它的程序中。如今就可以运用它了。留意 在Java言语中可以出如今类定义的括号外面的仅有两个语句,它们是package和import。5.5 包包援用包援用-每个类名前加上完好的包名每个类名前加上完好的包名例如,给出一个指向此包中的类的快捷方式。一旦运例如,给出一个指向此包中的类的快捷方式。一旦运用用importimport导入了以后,就不再需求给出完好的包导入了以后,就不再需求给出完好的包名。名。可以引入一个特定
34、的类,也可以引入整个包。可以引入一个特定的类,也可以引入整个包。importimport语句要放在源文件的头部但在一切语句要放在源文件的头部但在一切packagepackage语句的语句的下 面 。 例 如 , 可 以 经 过 下 面 的 语 句 引 入 在下 面 。 例 如 , 可 以 经 过 下 面 的 语 句 引 入 在java.utiljava.util包中的一切的类:包中的一切的类:import java.util.import java.util.* *; ;然后,就可以运用然后,就可以运用Date today=new Date();Date today=new Date();而不
35、需求在前面加上包名。也可以引入包中某个特定而不需求在前面加上包名。也可以引入包中某个特定的类:的类:import java.util.Date;import java.util.Date;5.5 包要把类放人一个包中,必需把此包的名字放在源文件头部,并且放在对包中的类进展定义的代码之前。例如,在文件Employee.java的开场部分如下:package com.horstmann.corejava;public class Employee把包中的文件放入与此完好的包名相匹配的子目录中。例如,在包com.horstmann.corejava中的一切的类文件都必需放在子目录com/horstm
36、ann/core.javaWindows下的comhorstmanncorejava下。这是最简单的一种方法,在本章的后面可以看到更多的选项。5.5 包类被存储在文件系统的子目录中。类的途径必需与所在包名相匹配。在前面的例子中,包目录com/horstmann/corejava是程序目录的一个子目录。然而这样安排很不灵敏。普通,有多个程序需求访问包文件。为了使包可以在多个程序间共享,需求做以下事情:1 把 类 放 在 一 个 或 多 个 特 定 的 目 录 中 , 比 如/home/user/classdir。此目录是包树的根本目录。假设参与了类com.horstmann.corejava.E
37、mployee,那么此类文件必需位于子目录/home/user/classdir/com/horstmann/corejava下。2设置类途径。类途径是其子目录包含类文件的一切根本目录的集合。 classpath5.5 包曾经接触过public和private访问指示符。被标志为Public的部件可以被任何类运用,而私有部件只能被定义它们的类运用。假设没有指定public或private,那么部件即类、方法或变量可以被同一个包中的一切方法访问。5.5 包n4 Java API4 Java API包包n为了简化面向对象的编程过程,为了简化面向对象的编程过程,JavaJava系统事先系统事先设计并
38、实现了一些表达了常用功能的规范类,设计并实现了一些表达了常用功能的规范类,如用于输入输出的类,用于数学运算的类,如用于输入输出的类,用于数学运算的类,用于图形用户界面设计的类,用于网络处置的用于图形用户界面设计的类,用于网络处置的类等。这些系统规范类根据实现的功能不同,类等。这些系统规范类根据实现的功能不同,可以划分成不同的集合,每个集合是一个包,可以划分成不同的集合,每个集合是一个包,合称为类库。可以援用这些包,也可以创建本合称为类库。可以援用这些包,也可以创建本人的包。人的包。n Java Java的类库是系统提供的已实现的规范类的的类库是系统提供的已实现的规范类的集合,是集合,是Java
39、Java编程的编程的APIAPI,它可以协助开发者,它可以协助开发者方便、快捷地开发方便、快捷地开发JavaJava程序程序5.6 接口n在Java言语中,接口Interface是对符合接口需求的类的一套规范。接口与包类似,也是用来组织运用中的各类并调理它们的相互关系的一种构造,更准确地说,接口是用来实现类间多重承继功能的构造n1 接口概念n接口主要作用是可以协助实现类似于类的多重承继的功能。在Java中,出于简化程序构造的思索,不再支持类间的多重承继而只支持单重承继,即一个类至多只能有一个直接父类。然而在处理实践问题的过程中,仅仅依托单重承继在很多情况下都不能将问题的复杂性表述完好,需求其他
40、的机制造为辅助。 5.6 接口n2 2 接口声明接口声明nJavaJava中声明接口的语法如下:中声明接口的语法如下:npublic interface public interface 接口名接口名 extends extends 父接口名父接口名列表列表 n / /接口体接口体; ;n/常量域声明常量域声明n public static final public static final 域类型域类型 域名域名= =常量值常量值; ;n / /笼统方法声明笼统方法声明n public abstract public abstract 前往值前往值 方法名方法名( (参数列参数列表表) th
41、row) throw异常列表异常列表;n n从上面的语法规定可以看出,定义接口与定义类非常从上面的语法规定可以看出,定义接口与定义类非常类似,实践上完全可以把接口了解成为一种特殊的类,类似,实践上完全可以把接口了解成为一种特殊的类,接口是由常量和笼统方法组成的特殊类接口是由常量和笼统方法组成的特殊类5.6 接口1接口中的属性都是用 final修饰的常量,2接口中的方法都是用abstract修饰的笼统方法,在接口中只能给出这些笼统方法的方法名、前往值和参数列表,而不能定义方法体,即仅仅规定了一组信息交换、传输和处置的“接口5.6 接口n2 2 接口的实现接口的实现n一个类要实现某个或某几个接口时
42、,有如下的一个类要实现某个或某几个接口时,有如下的步骤和本卷须知:步骤和本卷须知: n1 1在类的声明部分,用在类的声明部分,用implementsimplements关键字关键字声明该类将要实现哪些接口;声明该类将要实现哪些接口;n如下:如下:nclass class 类名类名 implements implements 接口接口 nn 5.6 接口2假照实现某接口的类不是abstract的笼统类,那么在类的定义部分必需实现指定接口的一切笼统方法,即为一切笼统方法定义方法体,而且方法头部分应该与接口中的定义完全一致,即有完全一样的前往值和参数列表; 3假照实现某接口的类是abstract的笼统类,那么它可以不实现该接口一切的方法。4一个类在实现某接口的笼统方法时,必需运用完全一样的方法头。5接口的笼统方法,其访问限制符都已指定是public,所以类在实现方法时,必需显式地运用public修饰符。 见书8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海绵钛还原蒸馏工安全理论能力考核试卷含答案
- 白酒酿造工班组协作模拟考核试卷含答案
- 罐头封装工安全意识强化考核试卷含答案
- 中药胶剂工改进测试考核试卷含答案
- 聚氨酯装置操作工安全意识水平考核试卷含答案
- 变压器设备检修工变更管理强化考核试卷含答案
- 绝缘子制造工岗前认知考核试卷含答案
- 烧结配料工风险识别模拟考核试卷含答案
- 海盐制盐工安全综合能力考核试卷含答案
- 口腔修复体制作师操作技能模拟考核试卷含答案
- 全国主要水文站点及雨量观测分布和代码
- 华为经营管理-华为的研发管理(6版)
- 浙江省稽阳联谊学校2023-2024学年高三上学期11月联考语文试题含答案
- “工业控制系统安全培训课件”
- 人教版地理八年级上册知识点总结
- 青钢竹叶剑的文化传承与发展
- 电测应力应变实验课件ppt
- 战略地图及平衡计分卡课件
- 民航服务沟通PPT完整全套教学课件
- (鲁科版五四制)小学三四五年级全部单词(带音标)
- 中考模拟考试语文答题卡Word版可以编辑(全黑色)
 
            
评论
0/150
提交评论