最新-JAVA面向对象编程第四章继承性和多态性-课件_第1页
最新-JAVA面向对象编程第四章继承性和多态性-课件_第2页
最新-JAVA面向对象编程第四章继承性和多态性-课件_第3页
最新-JAVA面向对象编程第四章继承性和多态性-课件_第4页
最新-JAVA面向对象编程第四章继承性和多态性-课件_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

第4章继承性和多态性第4章继承性和多态性12主要内容4.1继承性派生类的定义super关键字protected和final关键字4.2多态性4.3抽象类和接口抽象类接口4.4初始化块继承性&多态性2主要内容4.1继承性继承性&多态性234.1继承性类具有继承性,子类对父类的继承关系体现了现实世界中特殊和一般的关系。通过继承可以更有效地组织程序结构,明确类间关系,并充分利用已有的类来完成更复杂、深入的开发。4.1.1派生类的定义Java中的所有类都是java.lang.Object类的子类。Java语言中派生类的定义格式如下:示例:参看例4.1class<子类>extends<唯一的父类名>{<类定义体>}继承性&多态性34.1继承性类具有继承性,子类对父类的继承关系体现了现实344.1.2super关键字1.数据成员的隐藏数据成员的隐藏是指在子类中重新定义一个与父类中已定义的数据成员名完全相同的数据成员,即子类拥有了两个相同名字的数据成员,一个是继承父类的,另一个是自己定义的。当子类要操作继承自父类的同名数据成员时,可使用关键字super引导。2.成员方法的覆盖子类可以重新定义与父类格式完全相同(包括方法名、方法形参的个数和类型、方法返回值的类型)的成员方法,实现对父类方法的覆盖。继承性&多态性44.1.2super关键字1.数据成员的隐藏继承性&多45关于方法覆盖只有当实例方法能被访问时,才能进行方法覆盖。私有方法不能被覆盖.静态方法(类方法)能被继承,但不能被覆盖。子类在重新定义父类已有的方法时,应保持与父类完全相同的方法名、返回值类型和参数列表,否则就不是方法的覆盖,而是子类定义自己特有的方法,与父类的方法无关。继承性&多态性5关于方法覆盖只有当实例方法能被访问时,才能进行方法覆盖。私563.super关键字super表示的是当前对象的直接父类对象,是当前对象的直接父类对象的引用。super的使用方法有三种:(1)访问直接父类隐藏的数据成员,其使用形式如下:super.数据成员(2)调用直接父类中被覆盖的成员方法,其使用形式如下:super.成员方法(参数)(3)调用直接父类的构造方法,其使用形式如下:super(参数)示例:参看例4.2继承性&多态性63.super关键字super表示的是当前对象的直接父类673.super关键字子类中一定要调用父类的构造方法1、子类的构造方法必须调用父类的构造方法

2、子类可以在自己的构造函数中用super(argument_list)调用父类的构造方法

3、如果子类的构造函数中没有显式地调用父类的构造方法,系统将自动调用父类无参数的构造方法,此时如果父类中不存在无参数构造函数的话,编译会出差错

4、如果子类构造函数调用super(argument_list),这个语句必须写在构造函数的第一行继承性&多态性73.super关键字子类中一定要调用父类的构造方法继承784.1.3protected和final关键字1.protected关键字用protected修饰的成员变量可以被三种类所引:该类自身、与它在同一个包中的其它类及在其它包中的该类的子类。2.final关键字使用final关键字可以定义常量。定义类时,在class关键字前加关键字final,表示此类是最终类,不能被其它类继承,不能做父类。用final修饰成员方法,表示此方法不能被它的子类覆盖。继承性&多态性84.1.3protected和final关键字1.pr893.native关键字native修饰的方法称为本地方法,此方法使用的目的是为了将其它语言(例如,C、C++、FORTRAN、汇编等)嵌入到Java语言中。这样可以充分利用已经存在的其它语言的程序功能模块,避免重复编程。继承性&多态性93.native关键字native修饰的方法称为本地方法9104.2多态性多态是面向对象程序设计语言的一个重要特性,在Java中,可以在同一类或不同类中定义名称相同但是操作不同的多个方法。在Java语言中,多态性分为编译时多态性和运行时多态性。继承性&多态性104.2多态性多态是面向对象程序设计语言的一个重要特性,1011编译时的多态性通过方法重载实现。Java虚拟机根据传递给方法的参数个数和类型决定调用哪个重载方法。例如,java的打印函数对应的具体情况和操作有多种,如实数打印、整数打印、字符打印等。为了使打印功能完整,实际上定义了若干个名字都叫print的方法,每个方法用来完成一种不同于其他方法的具体打印操作,处理一种具体的打印情况。继承性&多态性11编译时的多态性通过方法重载实现。Java虚拟机根据传递给11例:TestOverride.java 1:publicclassTestOverride 2:{ 3:publicstaticvoidmain(Stringargs[]) 4:{ 5:D200-Cardmy200=newD200- Card(12345678,1234,50.0,″200″); 6:if(my200.performDial(12345678,1234))

7: System.out.println(″拨打电话后剩余金额为: ″+my200.getBalance()); 8:if(my200.performDial()) 9: System.out.println(″拨打电话后剩余金额为: ″+my200.getBalance()); 10:} 11:}继承性&多态性例:TestOverride.java继承性&多态性12 51:booleanperformDial() 52:{ 53:if(!connected) 54:returnfalse; 55:if(balance>(0.5+additoryFee)) 56:{ 57:balance-=(0.5+additoryFee); 58:returntrue; 59:} 60:else 61:returnfalse; 62:} 51:booleanperformDial()13 63:booleanperformDial(longcn,intpass) 64:{ 65:if(performConnection(cn,pass)) 66:returnperformDial(); 67:else 68:returnfalse; 69:} 70:doublegetBalance() 71:{ 72:if(connected) 73:returnbalance; 74:else 75:return-1; 76:} 77:} 63:booleanperformDial(long14 40:classD200-CardextendsNumber-PhoneCard 41:{ 44:D200-Card(longcn,intpw,doubleb,Stringc) 45:{ 46:cardNumber=cn;//创建对象时设置卡号和密码 47:password=pw; 48:balance=b; 49:connectNumber=c; 50:}继承性&多态性 40:classD200-Cardextends1516运行时的多态性是Java多态性的最重要的体现,在Java语言的继承关系中,子类对象与父类对象之间有一个重要特性:在任何需要父类对象的地方,都可以使用子类对象来代替,即子类对象可以作为父类对象来使用。一个对象可以通过引用子类的实例来调用子类的方法,通常,方法在父类中定义,在子类中覆盖,子类中调用哪个方法是在运行时决定的,取决于对象的类型,称为运行时的多态性。示例:参看例4.3继承性&多态性16运行时的多态性是Java多态性的最重要的体现,在Java16174.3抽象类和接口抽象类体现数据抽象的思想,是实现程序多态性的一种手段。接口则是Java中实现多重继承的唯一途径。4.3.1抽象类抽象类的作用在于将许多有关的类组织在一起,提供一个公共的类,即抽象类,而那些被它组织在一起的具体的类做为它的子类由它派生出来。定义一个抽象类的格式如下:abstractclassabstractClass{/*类定义体*/}抽象方法是指在返回值类型前加上abstract关键字,且没有方法体。格式如下:abstract<返回值类型><抽象方法名>([<形式参数列表>]);示例:参看例4.4继承性&多态性174.3抽象类和接口抽象类体现数据抽象的思想,是实现程1718对于抽象类与抽象方法的限制(1)凡是用abstract修饰符修饰的类被称为抽象类。凡是用abstract修饰符修饰的成员方法被称为抽象方法;(2)抽象类中可以有零个或多个抽象方法,也可以包含非抽象的方法;(3)抽象类中可以没有抽象方法,但是,有抽象方法的类必须是抽象类;(4)对于抽象方法来说,在抽象类中只指定其方法名及其类型,而不书写其实现代码;(5)抽象类可以派生子类,在抽象类派生的子类中必须实现抽象类中定义的所有抽象方法;继承性&多态性18对于抽象类与抽象方法的限制(1)凡是用abstrac1819(6)抽象类不能使用new运算符创建对象,但仍可在抽象类中定义构造方法,可由派生类的构造方法调用;(7)abstract和final不能同时修饰一个类;(8)abstract不能与private、static、final或native同时修饰一个方法;(9)abstract类中不能有private的数据成员或成员方法;(10)父类是非抽象类(即具体类),则其子类仍可是抽象类;(11)虽然不能创建抽象类的对象,但抽象类可以当作数据类型使用,如作为方法形参类型、返回值类型、数组元素类型等等。

继承性&多态性19(6)抽象类不能使用new运算符创建对象,但仍可在抽象19204.3.2

接口与C++不同,Java不支持多重继承,而是用接口实现比多重继承更强的功能。接口则把方法的定义和类的层次区分开来,接口可以实现“多重继承”,一个类可实现多个接口,正是这些机制使得接口提供了比多重继承更简单,更灵活,而且更强健的功能。接口就是方法定义和常量值的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有方法的实现。继承性&多态性204.3.2

接口与C++不同,Java不支持多重继承,而20211.声明接口声明接口的格式如下:[修饰符]interface接口名[extends父接口名列表]{常量数据成员声明抽象方法声明}其中:(1)interface是声明接口的关键字,可以把它看成一个特殊类;(2)接口名要求符合Java标识符命名规则;(3)修饰符有两种:public和默认。public修饰的接口是公共接口,可以被所有的类和接口使用;默认修饰符的接口只能被同一个包中的其它类和接口使用;继承性&多态性211.声明接口声明接口的格式如下:继承性&多态性2122(4)父接口列表:接口也具有继承性。定义一个接口时可以通过extends关键字声明该接口是某个已经存在的父接口的派生接口,它将继承父接口的所有属性和方法。与类的继承不同的是一个接口可以有一个以上的父接口,它们之间用逗号分隔;(5)常量数据成员声明:常量数据成员前可以有也可省略修饰符。修饰符是publicstatic和fina1;接口中的数据成员都是用final修饰的常量,写法如下:修饰符数据成员类型数据成员名=常量值或数据成员名=常量值例如:publicfinalstaticdoublePI=3.14159;//等价于doublePI=3.14159;intSUM=100;//等价于finalstaticintSUM=100;继承性&多态性22(4)父接口列表:接口也具有继承性。定义一个接口时可以2223(6)接口中没有自身的构造方法,所有成员方法都是抽象方法;在接口中只能给出这些抽象方法的方法名、返回值和参数列表,而不能定义方法体,即仅仅规定了一组信息交换、传输和处理的“接口”。格式如下:返回值类型方法名(参数列表);继承性&多态性23(6)接口中没有自身的构造方法,所有成员方法都是抽象方23242.接口的实现接口定义仅仅是实现某一特定功能的一组功能的对外接口和规范,而不能真正地实现这个功能,这个功能的真正实现是在“继承”这个接口的各个类中完成的,要由这些类来具体定义接口中各抽象方法的方法体。一个类只能继承一个父类,但是可实现多个接口。类定义的完整格式如下:[<修饰符>]class<类名>[extends<父类名>][implements<接口名1>,<接口名2>,……]{//类定义体}示例:参看例4.5继承性&多态性242.接口的实现接口定义仅仅是实现某一特定功能的一组功能的2425关于接口的实现(1)在类中,用implements关键字就可以调用接口。一个类可以调用多个接口,这时,在implements后用逗号隔开多个接口的名字;(2)如果实现某接口的类不是抽象类,则在类的定义体部分必须实现指定接口的所有抽象方法,即为所有抽象方法定义方法体,而且方法头部分应该与接口中的定义完全一致,即有完全相同的返回值和参数列表;(3)如果实现某接口的类是抽象类,则它可以不实现该接口所有的方法。(4)接口的抽象方法的访问限制符都己指定为public,所以类在实现方法时,必须显式地使用public修饰符,否则编译系统警告为缩小了接口中定义的方法的访问控制范围。继承性&多态性25关于接口的实现(1)在类中,用implements关键25263.接口和抽象类的区别Java中所有的类有共同的父类java.lang.Object,但接口没有共同的根。接口可以当作抽象类使用。它们的区别如下:(1)接口中的每个方法,没有实现部分,都是抽象方法;抽象类中可以有具体的方法。(2)接口中的数据必须是常量;抽象类可以有各种类型的数据。(3)由于定义在接口中的所有方法都是抽象方法,接口中可以省略abstract修饰符;但是抽象类中的抽象方法必须用abstract修饰。继承性&多态性263.接口和抽象类的区别Java中所有的类有共同的父类ja26274.类型转换和instanceof运算符基本数据类型可以进行强制或自动类型转换,也可以把一个类的对象转换为继承链中的另一个对象。将子类的实例转换为父类的实例总是可行的,因为子类的实例也是父类的实例。例如例4.5中的语句Shapes[0]=point;//等价于Shapes[0]=(Shape)point;把父类对象转换为子类对象时,必须使用强制类型转换,为使转换成功,必须确保转换的对象是子类的一个实例。继承性&多态性274.类型转换和instanceof运算符基本数据类型可2728进行转换时确保该对象是另一个类的实例,可以利用instanceof运算符来完成。如:Pointpoint1=newPoint();//Point是Circle的父类if(point1instanceofCircle){ Circlecircle1=(Circle)point1;}继承性&多态性28进行转换时确保该对象是另一个类的实例,可以利用insta2829父类对象与和子类对象的转化需要注意如下的原则:(1)子类对象可以被视为是其父类的一个对象;(2)父类对象不能当成是其某一个子类的对象;(3)如果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为形式参数;(4)如果父类对象引用指向的实际是一个子类对象,那么这个父类对象的引用可以用强制类型转换转化成子类对象的引用。在转换之前要使用instanceof运算符进行判断。继承性&多态性29父类对象与和子类对象的转化需要注意如下的原则:(1)子29305.Cloneable接口接口包含常量和抽象方法,但是Cloneable接口例外,Cloneable接口定义如下:publicinterfaceCloneable{}Cloneable接口的定义体为空,体为空的接口称为标记接口。Java系统要求,可复制的类需要实现Cloneable接口,利用定义在Object类中的clone()方法,可以克隆可复制类的对象。示例:参看例4.6与4.7继承性&多态性305.Cloneable接口接口包含常量和抽象方法,但是C30314.4初始化块初始化块用来和构造方法一起初始化对象。初始化块是封装在一对大括号内的语句块,初始化块在类的定义体内,但不能包含在方法体内或构造方法体内。初始化块分为对象(实例)初始化块和静态(类)初始化块。静态数据成员、初始化块和构造方法的执行顺序如下:(1)当第一次使用类时,首先装载类,初始化静态数据成员,然后执行类的静态初始化块。(2)当使用new运算符创建类的对象时,按下述三个步骤执行:①调用父类的构造方法(在调用父类的构造方法时,也按照这三个步骤执行)。②初始化实例数据域,执行对象初始化块。③执行构造方法。示例:参看例4.8继承性&多态性314.4初始化块初始化块用来和构造方法一起初始化对象。初31第4章继承性和多态性第4章继承性和多态性3233主要内容4.1继承性派生类的定义super关键字protected和final关键字4.2多态性4.3抽象类和接口抽象类接口4.4初始化块继承性&多态性2主要内容4.1继承性继承性&多态性33344.1继承性类具有继承性,子类对父类的继承关系体现了现实世界中特殊和一般的关系。通过继承可以更有效地组织程序结构,明确类间关系,并充分利用已有的类来完成更复杂、深入的开发。4.1.1派生类的定义Java中的所有类都是java.lang.Object类的子类。Java语言中派生类的定义格式如下:示例:参看例4.1class<子类>extends<唯一的父类名>{<类定义体>}继承性&多态性34.1继承性类具有继承性,子类对父类的继承关系体现了现实34354.1.2super关键字1.数据成员的隐藏数据成员的隐藏是指在子类中重新定义一个与父类中已定义的数据成员名完全相同的数据成员,即子类拥有了两个相同名字的数据成员,一个是继承父类的,另一个是自己定义的。当子类要操作继承自父类的同名数据成员时,可使用关键字super引导。2.成员方法的覆盖子类可以重新定义与父类格式完全相同(包括方法名、方法形参的个数和类型、方法返回值的类型)的成员方法,实现对父类方法的覆盖。继承性&多态性44.1.2super关键字1.数据成员的隐藏继承性&多3536关于方法覆盖只有当实例方法能被访问时,才能进行方法覆盖。私有方法不能被覆盖.静态方法(类方法)能被继承,但不能被覆盖。子类在重新定义父类已有的方法时,应保持与父类完全相同的方法名、返回值类型和参数列表,否则就不是方法的覆盖,而是子类定义自己特有的方法,与父类的方法无关。继承性&多态性5关于方法覆盖只有当实例方法能被访问时,才能进行方法覆盖。私36373.super关键字super表示的是当前对象的直接父类对象,是当前对象的直接父类对象的引用。super的使用方法有三种:(1)访问直接父类隐藏的数据成员,其使用形式如下:super.数据成员(2)调用直接父类中被覆盖的成员方法,其使用形式如下:super.成员方法(参数)(3)调用直接父类的构造方法,其使用形式如下:super(参数)示例:参看例4.2继承性&多态性63.super关键字super表示的是当前对象的直接父类37383.super关键字子类中一定要调用父类的构造方法1、子类的构造方法必须调用父类的构造方法

2、子类可以在自己的构造函数中用super(argument_list)调用父类的构造方法

3、如果子类的构造函数中没有显式地调用父类的构造方法,系统将自动调用父类无参数的构造方法,此时如果父类中不存在无参数构造函数的话,编译会出差错

4、如果子类构造函数调用super(argument_list),这个语句必须写在构造函数的第一行继承性&多态性73.super关键字子类中一定要调用父类的构造方法继承38394.1.3protected和final关键字1.protected关键字用protected修饰的成员变量可以被三种类所引:该类自身、与它在同一个包中的其它类及在其它包中的该类的子类。2.final关键字使用final关键字可以定义常量。定义类时,在class关键字前加关键字final,表示此类是最终类,不能被其它类继承,不能做父类。用final修饰成员方法,表示此方法不能被它的子类覆盖。继承性&多态性84.1.3protected和final关键字1.pr39403.native关键字native修饰的方法称为本地方法,此方法使用的目的是为了将其它语言(例如,C、C++、FORTRAN、汇编等)嵌入到Java语言中。这样可以充分利用已经存在的其它语言的程序功能模块,避免重复编程。继承性&多态性93.native关键字native修饰的方法称为本地方法40414.2多态性多态是面向对象程序设计语言的一个重要特性,在Java中,可以在同一类或不同类中定义名称相同但是操作不同的多个方法。在Java语言中,多态性分为编译时多态性和运行时多态性。继承性&多态性104.2多态性多态是面向对象程序设计语言的一个重要特性,4142编译时的多态性通过方法重载实现。Java虚拟机根据传递给方法的参数个数和类型决定调用哪个重载方法。例如,java的打印函数对应的具体情况和操作有多种,如实数打印、整数打印、字符打印等。为了使打印功能完整,实际上定义了若干个名字都叫print的方法,每个方法用来完成一种不同于其他方法的具体打印操作,处理一种具体的打印情况。继承性&多态性11编译时的多态性通过方法重载实现。Java虚拟机根据传递给42例:TestOverride.java 1:publicclassTestOverride 2:{ 3:publicstaticvoidmain(Stringargs[]) 4:{ 5:D200-Cardmy200=newD200- Card(12345678,1234,50.0,″200″); 6:if(my200.performDial(12345678,1234))

7: System.out.println(″拨打电话后剩余金额为: ″+my200.getBalance()); 8:if(my200.performDial()) 9: System.out.println(″拨打电话后剩余金额为: ″+my200.getBalance()); 10:} 11:}继承性&多态性例:TestOverride.java继承性&多态性43 51:booleanperformDial() 52:{ 53:if(!connected) 54:returnfalse; 55:if(balance>(0.5+additoryFee)) 56:{ 57:balance-=(0.5+additoryFee); 58:returntrue; 59:} 60:else 61:returnfalse; 62:} 51:booleanperformDial()44 63:booleanperformDial(longcn,intpass) 64:{ 65:if(performConnection(cn,pass)) 66:returnperformDial(); 67:else 68:returnfalse; 69:} 70:doublegetBalance() 71:{ 72:if(connected) 73:returnbalance; 74:else 75:return-1; 76:} 77:} 63:booleanperformDial(long45 40:classD200-CardextendsNumber-PhoneCard 41:{ 44:D200-Card(longcn,intpw,doubleb,Stringc) 45:{ 46:cardNumber=cn;//创建对象时设置卡号和密码 47:password=pw; 48:balance=b; 49:connectNumber=c; 50:}继承性&多态性 40:classD200-Cardextends4647运行时的多态性是Java多态性的最重要的体现,在Java语言的继承关系中,子类对象与父类对象之间有一个重要特性:在任何需要父类对象的地方,都可以使用子类对象来代替,即子类对象可以作为父类对象来使用。一个对象可以通过引用子类的实例来调用子类的方法,通常,方法在父类中定义,在子类中覆盖,子类中调用哪个方法是在运行时决定的,取决于对象的类型,称为运行时的多态性。示例:参看例4.3继承性&多态性16运行时的多态性是Java多态性的最重要的体现,在Java47484.3抽象类和接口抽象类体现数据抽象的思想,是实现程序多态性的一种手段。接口则是Java中实现多重继承的唯一途径。4.3.1抽象类抽象类的作用在于将许多有关的类组织在一起,提供一个公共的类,即抽象类,而那些被它组织在一起的具体的类做为它的子类由它派生出来。定义一个抽象类的格式如下:abstractclassabstractClass{/*类定义体*/}抽象方法是指在返回值类型前加上abstract关键字,且没有方法体。格式如下:abstract<返回值类型><抽象方法名>([<形式参数列表>]);示例:参看例4.4继承性&多态性174.3抽象类和接口抽象类体现数据抽象的思想,是实现程4849对于抽象类与抽象方法的限制(1)凡是用abstract修饰符修饰的类被称为抽象类。凡是用abstract修饰符修饰的成员方法被称为抽象方法;(2)抽象类中可以有零个或多个抽象方法,也可以包含非抽象的方法;(3)抽象类中可以没有抽象方法,但是,有抽象方法的类必须是抽象类;(4)对于抽象方法来说,在抽象类中只指定其方法名及其类型,而不书写其实现代码;(5)抽象类可以派生子类,在抽象类派生的子类中必须实现抽象类中定义的所有抽象方法;继承性&多态性18对于抽象类与抽象方法的限制(1)凡是用abstrac4950(6)抽象类不能使用new运算符创建对象,但仍可在抽象类中定义构造方法,可由派生类的构造方法调用;(7)abstract和final不能同时修饰一个类;(8)abstract不能与private、static、final或native同时修饰一个方法;(9)abstract类中不能有private的数据成员或成员方法;(10)父类是非抽象类(即具体类),则其子类仍可是抽象类;(11)虽然不能创建抽象类的对象,但抽象类可以当作数据类型使用,如作为方法形参类型、返回值类型、数组元素类型等等。

继承性&多态性19(6)抽象类不能使用new运算符创建对象,但仍可在抽象50514.3.2

接口与C++不同,Java不支持多重继承,而是用接口实现比多重继承更强的功能。接口则把方法的定义和类的层次区分开来,接口可以实现“多重继承”,一个类可实现多个接口,正是这些机制使得接口提供了比多重继承更简单,更灵活,而且更强健的功能。接口就是方法定义和常量值的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有方法的实现。继承性&多态性204.3.2

接口与C++不同,Java不支持多重继承,而51521.声明接口声明接口的格式如下:[修饰符]interface接口名[extends父接口名列表]{常量数据成员声明抽象方法声明}其中:(1)interface是声明接口的关键字,可以把它看成一个特殊类;(2)接口名要求符合Java标识符命名规则;(3)修饰符有两种:public和默认。public修饰的接口是公共接口,可以被所有的类和接口使用;默认修饰符的接口只能被同一个包中的其它类和接口使用;继承性&多态性211.声明接口声明接口的格式如下:继承性&多态性5253(4)父接口列表:接口也具有继承性。定义一个接口时可以通过extends关键字声明该接口是某个已经存在的父接口的派生接口,它将继承父接口的所有属性和方法。与类的继承不同的是一个接口可以有一个以上的父接口,它们之间用逗号分隔;(5)常量数据成员声明:常量数据成员前可以有也可省略修饰符。修饰符是publicstatic和fina1;接口中的数据成员都是用final修饰的常量,写法如下:修饰符数据成员类型数据成员名=常量值或数据成员名=常量值例如:publicfinalstaticdoublePI=3.14159;//等价于doublePI=3.14159;intSUM=100;//等价于finalstaticintSUM=100;继承性&多态性22(4)父接口列表:接口也具有继承性。定义一个接口时可以5354(6)接口中没有自身的构造方法,所有成员方法都是抽象方法;在接口中只能给出这些抽象方法的方法名、返回值和参数列表,而不能定义方法体,即仅仅规定了一组信息交换、传输和处理的“接口”。格式如下:返回值类型方法名(参数列表);继承性&多态性23(6)接口中没有自身的构造方法,所有成员方法都是抽象方54552.接口的实现接口定义仅仅是实现某一特定功能的一组功能的对外接口和规范,而不能真正地实现这个功能,这个功能的真正实现是在“继承”这个接口的各个类中完成的,要由这些类来具体定义接口中各抽象方法的方法体。一个类只能继承一个父类,但是可实现多个接口。类定义的完整格式如下:[<修饰符>]class<类名>[extends<父类名>][implements<接口名1>,<接口名2>,……]{//类定义体}示例:参看例4.5继承性&多态性242.接口的实现接口定义仅仅是实现某一特定功能的一组功能的5556关于接口的实现(1)在类中,用implements关键字就可以调用接口。一个类可以调用多个接口,这时,在implements后用逗号隔开多个接口的名字;(2)如果实现某接口的类不是抽象类,则在类的定义体部分必须实现指定接口的所有抽象方法,即为所有抽象方法定义方法体,而且方法头部分应该与接口中的定义完全一致,即有完全相同的返回值和参数列表;(3)如果实现某接口的类是抽象类,则它可以不实现该接口所有的方法。(4)接口的抽象方法的访问限制符都己指定为public,所以类在实现方法时,必须显式地使用public修饰符,否则编译系统警告为缩小了接口中定义的方法的访问控制范围。

温馨提示

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

评论

0/150

提交评论