收藏 分享(赏)

Java程序设计修改-ch04.doc

上传人:dreamzhangning 文档编号:2691367 上传时间:2018-09-25 格式:DOC 页数:23 大小:208KB
下载 相关 举报
Java程序设计修改-ch04.doc_第1页
第1页 / 共23页
Java程序设计修改-ch04.doc_第2页
第2页 / 共23页
Java程序设计修改-ch04.doc_第3页
第3页 / 共23页
Java程序设计修改-ch04.doc_第4页
第4页 / 共23页
Java程序设计修改-ch04.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/第 4 章 继承和多态继承是 Java 语言的一个重要特性。本章主要介绍关于继承的若干应用。通过继承,子类拥有父类的所有非私有成员。子类对继承自父类的类成员重新进行定义,就称为覆盖。方法的重载是一个类中对自身已有的同名方法的重新定义。每个重载方法的参数的类型和(或)数量必须是不同的。用 abstract 修饰符修饰的类称为抽象类,抽象类不能实例化为对象。如果一个类被 final 修饰符所修饰,说明这个类不可能有子类,这样的类就称为最终类。最终类不能被别的类继承,它的方法

2、也不能被覆盖。接口用 interface 来声明。接口中的域变量都是常量,方法都是没有方法体的抽象方法,其方法的真正实现在“继承”这个接口的各个类中完成。一个类只能有一个父类,但是类可以同时实现若干个接口,从而实现了多重继承。本章要点 继承和多态的概念、特点以及实现方法 域的继承与隐藏 方法的继承与覆盖 接口的实现本章难点 继承和多态的实现方法 接口的实现学习目标 理解继承、多态、接口的概念 掌握继承、多态、接口在 Java 中的实现。本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/4.1 继承和多态的概念4.1.1

3、 继承的概念继承实际上是存在于面向对象程序中的两个类之间的一种关系。当一个类 A 能够获取另一个类 B 中所有非私有的数据和操作的定义作为自己的部分或全部成分时,就称这两个类之间具有继承关系。被继承的类 B 称为父类或超类,继承了父类或超类的数据和操作的类 A 称为子类或衍生类,一个父类可以同时拥有多个子类。使用继承具有以下的好处:降低了代码编写中的冗余度,更好地实现了代码复用的功能,从而提高了程序编写的效率,使得程序维护变得简单、方便。现以汽车为例,汽车分为很多种,比如公共汽车、警车、私家车等。如果要实现对汽车的管理,就需要为每一种汽车创建一个类,而每一个类中都会具有所有汽车共有的属性和方法

4、,比如每个汽车类都会有颜色、车灯等属性,都会有加速、刹车等方法,这样势必带来代码的重复,维护起来也比较麻烦。如果我们将所有汽车共有的属性和方法都抽象出来,构建一个汽车类,让各种汽车都继承这个类,这样在汽车这个类中所拥有的属性就会衍生在它的子类中,各种汽车都会具有汽车类所拥有的属性和方法,我们就不用为每种汽车定义像颜色、车灯这样的属性,以及加速、刹车等相同的方法了。而且维护起来也比较容易了。这种结构如图 4-1 所示。图 4-1 汽车类的继承继承分为单重继承和多重继承两种类型,所谓单重继承,是指任何一个类都只有一个单一的父类;而多重继承是指一个类可以有一个以上的父类。采用单重继承的程序结构比较简

5、单,是单纯的树状结构,掌握、控制起来相对容易;而支持多重继承的程序,其结构则是复杂的网状,设计、实现都比较复杂。Java 语言仅支持类的单重继承。4.1.2 多态的概念多态是面向对象程序设计的又一个特殊特性。所谓多态,是指一个程序中同名的不同方法共存的情况。面向对象的程序中多态的情况有多种,可以通过子类对父类成汽车类颜色、车灯加速() 、刹车()公共汽车 警车 私家车本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/员的覆盖实现多态,也可以利用在同一个类中同名方法的重载来实现多态。多态是指一个方法声明的多个不同表现形式

6、。在同一个类中或者不同的类中,同一个方法的多个不同实现。比如同样是刹车这样一个功能,在不同的汽车中所要做的操作可能是不一样的,这样我们在程序中就要为刹车这个方法名创建几个不同的实现,也就是说,刹车这个方法名可能会有几个不同的方法体,这就是面向对象程序设计中多态的概念。 4.2 类的继承4.2.1 继承的实现Java 中的继承是通过 extends 关键字来实现的,在定义类时使用 extends 关键字指明新定义类的父类,就在两个类之间建立了继承关系。其语法是:类修饰符 class 子类名 extends 父类名从上面的语法格式,我们可以看出比一般类的声明多了“extends”关键字部分,通过该

7、关键字来指明子类要继承的父类。如果,父类和子类不在同一个包中,则需要使用“import”语句来引入父类所在的包。【例 4_1】继承的简单示例。class Fatherint f_a=0;void print()System.out.println (“f_a=“+f_a);class Son extends Fatherint s_a=10;class Exam4_1public static void main(String args)Son s =new Son();s.print();System.out.println (“f_a=“+s.f_a);System.out.println

8、 (“s_a=“+s.s_a);在例子中可以看到,在子类的声明中使用“extends”关键字指明一个被继承的父类就可以实现类之间的继承关系。Son 类中虽然并没有定义 f_a 变量和 print()方法,但是仍然可以访问,这是因为它从父类中继承过来的原因。子类 Son 还定义了自己的变本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/量 s_a,这说明了子类可以拥有比父类更多的变量和方法,也就是说子类拥有更强大的功能。程序的执行结果如图 4-2 所示。图 4-2 例 4_1 程序运行结果4.2.2 类成员的继承新定义的

9、子类可以从父类那里自动继承所有非 private 的属性和方法作为自己的成员。同时根据需要再加入一些自己的属性或方法就产生了一个新的子类。可见父类的所有非私有成员实际是各子类都拥有集合的一部分,这样做的好处是减少程序维护的工作量。从父类继承来的成员,就成为了子类所有成员的一部分,子类可以使用它。【例 4_2】继承的示例。class Fatherprivate int f_a=0;private void print()System.out.println (“f_a=“+f_a);class Son extends Fatherint s_a=10;class Exam4_2public st

10、atic void main(String args)Son s =new Son();/ s.print();/ System.out.println (“f_a=“+s.f_a);System.out.println (“s_a=“+s.s_a);仍然如 4.1 的例子,但此时我们把父类中的变量 f_a 和方法 print()修改为了 private的作用域,此时在子类中就不能访问这两个成员了,因为子类不能继承私有的父类成本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/员,程序中注释掉的两条语句是错误的读者可自行

11、检验。程序的运行结果如图 43 所示。图 4-3 例 4_2 程序运行结果【例 4_3】继承的示例。class Fatherprivate int f_a=0;void print()System.out.println (“f_a=“+f_a);class Son extends Fatherint s_a=10;class Exam4_3public static void main(String args)Son s =new Son();s.print();/ System.out.println (“f_a=“+s.f_a);System.out.println (“s_a=“+s.

12、s_a);继续对 4.1 的例子作修改,把把父类中的变量 f_a 修改为了 private 的作用域,但方法 print()仍然保持默认作用域,此时可以看到在子类中直接访问变量 f_a 会出现错误,但通过 print()方法我们却可以访问到私有作用域的 f_a 变量,这又是因为什么呢?这是因为 print()方法被子类继承, print()方法和变量 f_a 都是父类的成员,它们之间进行访问是不存在问题的,利用公共的方法去访问私有的成员,这正是面向对象封装特点的好处,它使得在类外不能直接访问私有的属性,但可以利用方法作为接口对变量进行读取操作,增强了程序的健壮性。程序的运行结果如图 4_4 所

13、示。本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/图 4- 4 例 4_3 程序运行结果4.2.3 替代原理有了继承特点,面向对象编程中就存在了一个替代原理,用一句话讲替代原理的内容是:子类对象总可以看作一个父类对象。也就是说,在所有使用父类对象的地方,都可以使用一个子类对象来代替父类对象,也有人把这种原理称为“is a”关系。比如在例 4.1 中,f_a 变量和 print()方法是父类的成员,应该用父类的对象去访问,但我们却使用了子类的对象去访问这两个成员,这可以认为是一种简单的替代,我们来看下面这个例子。【例

14、 4_4】替代原理示例。class Fatherprivate int f_a=0;void print(Father f)System.out.println (“f_a=“+f.f_a);class Son extends Fatherclass Exam4_4public static void main(String args)Father f=new Father();Son s =new Son();f.print(s);我们给 print( )方法加上了参数,这个参数是一个父类的引用,但我们调用时,却给方法传递了一个子类的引用 s,程序却依然可以正常运行,这就是替代原理。程序的运

15、行结果如图 4-5 所示。本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/图 4-5 例 4_4 程序运行结果4.3 类成员的覆盖4.3.1 覆盖的用法在程序的设计过程中,我们通过继承可以快速地将父类中已实现的非私有类成员应用到自己定义的子类中。但是,不是所有继承下来的类成员都是我们需要的,这时候我们就可以通过使用覆盖的方式来解决这个问题。子类对继承自父类的类成员重新进行定义,就称为覆盖。要进行覆盖,就是在子类中对需要覆盖的类成员以父类中相同的格式,再重新声明定义一次,这样就可以对继承下来的类成员进行功能的重新实现,

16、从而达到程序设计的要求。【例 4_5】覆盖的示例。class Fatherint f_a=0;void print()System.out.println (“f_a=“+f_a);class Son extends Fatherint f_a=10;void print()System.out.println (“f_a=“+f_a);class Exam4_5public static void main(String args)Son s =new Son();s.print();System.out.println (“f_a=“+s.f_a);本资料由-大学生创业|创业|创业网 ht

17、tp:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/我们在子类中重新定义了 print()方法和变量 f_a,此时子类的 print()方法覆盖了父类的 print()方法,子类中的变量 f_a 隐藏了父类中的变量 f_a,在子类中再去调用 print()方法或者访问变量 f_a 都是访问的子类中的成员,因此此时只输出的变量f_a 都是子类中的变量 f_a=10,而没有输出父类的变量 f_a=0。程序运行结果如图 4-6所示。图 4-6 例 4_5 程序运行结果4.3.2 super 参考如果要使用父类中被覆盖的方法或被隐藏的变量,此时可以使用 super 参

18、考。相对this 来说, super 表示的是当前类的直接父类对象,是当前对象的直接父类对象的引用。所谓直接父类是相对于当前类的其他“祖先”类而言的。例如,假设类 A 派生出子类B,B 类又派生出自己的子类 C,则 B 是 C 的直接父类,而 A 是 C 的祖先类。super 代表的就是直接父类。这就使得我们可以比较简便、直观地在子类中引用直接父类中的相应属性或方法。【例 4_6】super 参考的示例。class Fatherint f_a=0;void print()System.out.println (“f_a=“+f_a);class Son extends Fatherint f_

19、a=10;void print()super.print();System.out.println (“f_a=“+super.f_a);class Exam4_6public static void main(String args)本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/Son s =new Son();s.print();System.out.println (“f_a=“+s.f_a);程序中我们对子类的 print()方法作以修改,在方法内部我们首先使用了 super 关键字引用了父类的 print

20、()方法,输出了父类的变量 f_a,然后我们又通过 super 关键字直接引用了父类的变量 f_a,最后才输出了子类中的变量 f_a。程序运行的结果如图 4-7 所示。图 4-7 例 4_6 程序运行结果4.4 方法重载4.4.1 方法的重载在 Java 中,同一个类中多个同名方法之间构成重载关系,在完成同一功能时,可能遇到不同的具体情况,所以需要定义含不同的具体内容的方法,这些方法的具体实现代码可能不一样,但他们的名称相同,这些方法间构成重载。例如,一个类需要具有打印的功能,而打印是一个很广泛的概念,对应的具体情况和操作有多种,如实数打印、整数打印、字符打印、分行打印等。为了使打印功能完整,

21、在这个类中就可以定义若干个名字都叫 print()的方法,每个方法用来完成一种不同于其他方法的具体打印操作,处理一种具体的打印情况,这些同名 print()方法的关系就是重载关系。public void print (int i)public void print (float f)public void print ()当一个重载方法被调用时,Java 用参数的类型、数量、参数的顺序来表明实际调用的重载方法的版本。因此,每个重载方法的参数的类型、数量或者参数的顺序至少有一个是不同的,但不能通过方法的返回值类型来定义重载的方法。【例 4_7】方法重载的示例。本资料由-大学生创业|创业|创业网

22、http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/class Exam4_7int i=5;String s=“hello“;void print()System.out.println(“i=“+i+“ s=“+s);void print(int i)System.out.println (“i=“+i);void print(String s)System.out.println (“s=“+s);void print(int i,String s) System.out.println(“i=“+i+“ s=“+s);void print(Stri

23、ng s,int i) System.out.println(“s=“+s+“ i=“+i);/* int print(int i)return i;*/public static void main(String args)Exam4_7 e =new Exam4_7();e.print();e.print(10);e.print(“java“);e.print(10,“java“);e.print(“java“,10);程序中一共定义了 5 个 print()方法,这 5 个 print()方法要么参数的个数不一样,要么参数的类型不一样,要么参数的顺序不一样,这 5 个方法间构成方法的重载

24、。但是被注释掉的 int print(int i)方法由于只是返回值类型与 void print(int i)方法不一样,不具备构成重载的条件,不能够构成重载,因此编译时会出错,提示方法已经被定义,读者可自行测试。程序的运行结果如图 48 所示。本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/图 4-8 例 4_7 程序运行结果4.4.2 构造函数的重载构造函数间也可以构成重载。不同对象的创建很多时候就是通过构造函数的重载来实现的。并且在构造函数重载中我们还可以使用 this 关键字来指明重载的构造函数。【例 4_8

25、】构造函数的重载示例。class PersonString name;int age;Person()name=“noname“;age=1;Person(String name)this();this.name=name;Person(int age)this();this.age=age;Person(String name,int age)this.name=name;this.age=age;void print()System.out.println (“我的名字是“+name+“,年龄是“+age);本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|

26、什么减肥药效果最好|减肥瘦身药|http:/class Exam4_8public static void main(String args)Person p1=new Person(); p1.print();Person p2=new Person(“小明“); p2.print();Person p3=new Person(10); p3.print();Person p4=new Person(“小芳“,11); p4.print();程序中创建了四个构造函数,四个构造函数构成重载,通过不同的构造函数可以创建出不同的对象,并且使用了 this 关键字来调用了已经存在的构造函数,程序的运

27、行结果如图 4-9 所示。图 4-9 例 4_8 程序运行结果注意在使用 this 关键字来重载构造函数时, this 必须是构造函数的第一个语句,且一个构造函数中只能出现一次。类似的可以在构造函数中使用 super 关键字来调用父类的构造函数。4.4.3 多态面向对象编程的第三大特征称为多态,是指一个方法声明的多个不同表现形式。一个方法可以用不同的方式来解释,多态通常被认为是一种方法在不同的类中可以有不同的实现,甚至在同一类中仍可能有不同的定义及实现。比如前面讲过的子类对父类方法的覆盖以及同一个类中方法的重载,这都是多态的表现形式。多态是指一个方法声明的多种实现状态。无论是方法重载还是方法覆

28、盖,都要求其方法的声明要一致,不一样的是在具体实现方法时,方法体的内容不一样,方法在调用时,必须通过传入本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/的参数的不同或者具体对象的不同,来确定究竟是调用方法的那一种实现形式。方法收到消息时,对象要予以响应,不同的对象收到同一消息可以产生完全不同的结果,一个名字有多个不同的实现,以实现不同的功能,一名多用,方便名称空间的简化和记忆,方便代码的抽象编程,这正是多态存在的意义。4.5 抽象类和最终类4.4.1 抽象类类是对对象的抽象,有时我们需要对类进行抽象,比如有些类具有共

29、同的特性和功能,我们可以把这些共同的东西抽象出来组织成一个类,让其他类继承这个类,这样就可以简化代码的设计了。有些时候这些具有相同功能的类可能根本不相关,功能的具体实现也有很大差别,做普通类的继承不能达到我们的要求,此时就需要一种跟高级别的抽象,在 Java 中使用抽象类来实现这种抽象。举个例子而言,假设“鸟”是一个类,它代表了所有鸟的共同属性及其动作,任何一只具体的鸟儿都同时是由“鸟”经过特殊化形成的某个子类的对象,比如它可以派生出 “鸽子 ”、 “燕子” 、 “麻雀” 、 “天鹅”等具体的鸟类。但是现实中并不会存在一只实实在在的鸟,它既不是鸽子,也不是燕子或麻雀,更不是天鹅,这只鸟仅仅是一

30、只抽象的“鸟” ,这就是抽象类的概念。有了“鸟”这个抽象类,在描述和处理某一种具体的鸟时,就只需要简单地描述出它与其他鸟类所不同的特殊之处,而不必再重复它与其它鸟类相同的特点。比如可以这样描述“燕子”这种鸟“燕子是一种长着剪刀似的尾巴,喜在屋檐下筑窝的鸟” 。这种组织方式使得所有的概念层次分明,描述方便简单,符合人们的思维习惯。Java 中定义抽象类是出于相同的考虑。由于抽象类是它的所有子类的公共属性的集合,所以使用抽象类的一大优点就是可以充分利用这些公共属性来提高开发和维护程序的效率。在 Java 中,凡是用 abstract 修饰符修饰的类称为抽象类。它和一般的类不同之处在于: 如果一个类

31、中含有未实现的抽象方法,那么这个类就必须通过关键字 abstract进行标记声明为抽象类。 抽象类中可以包含抽象方法,但不是一定要包含抽象方法。它也可以包含非抽象方法和域变量,就像一般类一样。 抽象类是没有具体对象的概念类,也就是说抽象类不能实例化为对象。 抽象类的子类必须为父类中的所有抽象方法提供实现,否则它们也是抽象类。定义一个抽象类的格式如下: abstract class ClassName . /类的主体部分本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/抽象方法是指使用 abstract 关键字修饰,没有

32、方法体的方法,其格式为:修饰符 abstract 返回值类型 方法名(参数列表);注意抽象方法是没有方法体的,甚至连方法体的括号也没有。【例 4_9】抽象类示例。abstract class birdabstract void fly();class swallow extends birdvoid fly()System.out.println(“燕子在飞翔!“);class eagle extends birdvoid fly()System.out.println(“老鹰在滑翔!“);class Exam4_9public static void main(String args)new

33、 swallow().fly();new eagle().fly();程序的运行结果如图 4-10 所示。图 4-10 例 4_9 程序运行结果4.4.2 最终类如果一个类被 final 修饰符所修饰和限定,说明这个类不可能有子类,这样的类就称为最终类。最终类不能被别的类继承,它的方法也不能被覆盖。被定义为 final 的类本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/通常是一些有固定作用、用来完成某种标准功能的类。例如最常用的 System 类就是final 类。将一个类定义成 final 类,使得这个类不能再派

34、生子类,这样其中的方法也就不能被覆盖,避免了这个类被外界修改,增强了程序的健壮性、稳定性。注意 abstract 和 final 修饰符不能同时修饰一个类,因为 abstract 类自身没有具体对象,需要派生出子类后再创建子类的对象;而 final 类不可能有子类,这两个修饰符恰好是矛盾的,所以 abstract 和 final 修饰符不能同时修饰一个类。4.6 接口4.6.1 接口的定义Java 中的接口是对类的进一步抽象,是一种比抽象类更高一层次的抽象。有时一个类中被抽象的只剩下了抽象方法和一些常量,此时我们可以把这个类声明为一个接口。可以说接口是一个完全抽象类。接口中只能定义常量和抽象方

35、法,并且他们默认都具有 public 的修饰符。所以,接口定义的仅仅是实现某一特定功能的一组对外的规范,而并没有真正的实现这个功能。这个功能的真正实现是在“继承”这个接口的各个类中完成的,要由这些类来具体定义接口中各抽象方法的方法体。Java 中声明接口的语法如下:public interface 接口名extends 父接口名列表 /接口体/常量域声明public static final 域类型 域名常量值; /抽象方法声明public abstract native 返回值 方法名(参数列表)throw 异常列表; interface 是接口声明的关键字,它引导着所定义的接口的名字,这个

36、名字应该符合Java 对标识符的规定。与类定义相仿,声明接口时也需要给出访问控制符,不同的是接口的访问控制符只有 public 一个。用 public 修饰的接口是公共接口,可以被所有的类和接口使用,而没有 public 修饰符的接口则只能被同一个包中的其他类和接口利用。与类相仿,接口也具有继承性。定义一个接口时可以通过 extends 关键字声明该新接口是某个已经存在的父接口的派生接口,它将继承父接口的所有属性和方法。与类的继承不同的是一个接口可以有一个以上父接口,它们之间用逗号分隔,形成父接口列表。新接口将继承所有父接口中的属性和方法。接口体由两个部分组成:一部分是对接口中域变量的声明,另

37、一部分是对接口中方法的声明。接口中的所有域变量都必须是 public static final,这是系统默认的规定,所以接口属性也可以没有任何修饰符,其效果完全相同。接口中的所有方法都必须是本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/默认的 public abstract,无论是否有修饰符显式地限定它。在接口中只能给出这些抽象方法的方法名、返回值类型和参数列表,而不能定义方法体。定义接口可归纳为如下几点: 在 Java 中接口是一种专门的类型。用 interface 关键字定义接口。 接口中只能定义抽象方法,不能

38、有方法体,一定是 public 修饰的。 接口中可以定义变量,但实际上是 static final 修饰的常量。 接口中不能定义静态方法。从语法规定可以看出,定义接口与定义类非常相似。实际上完全可以把接口理解成为由常量和抽象方法组成的特殊类。一个类只能有一个父类,但是类可以同时实现若干个接口。这种情况下如果把接口理解成特殊的类,那么这个类利用接口实际上就获得了多个父类,即实现了多重继承。【例 4_10】接口的示例。public interface Exam4_10public static final int x=10;int y=0;public void z();public abstra

39、ct int getz();interface Sub_Interface extends Exam4_10public static final int a=0;int b=10;public void c();public abstract int getc();4.6.2 接口的实现接口的声明仅仅给出了抽象方法,相当于程序开发中的一组协议,而具体地实现接口所规定的功能,则需某个类为接口中的抽象方法定义实在的方法体,称为实现这个接口。如果一个类要实现一个接口,那么这个类就提供了实现定义在接口中的所有抽象方法的方法体。 一个类要实现一个接口其语法格式为:修饰符 class 类名 extend

40、s 父类名 implements 接口名列表/实现的接口中的方法体一个类要实现接口时,要注意以下几个问题: 在类的声明部分,用 implements 关键字声明该类将要实现哪些接口。 如果实现某接口的类不是 abstract 抽象类,则必须为所有抽象方法定义方法体,本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/而且方法头部分应该与接口中的定义完全一致。 如果实现某接口的的类是 abstract 的抽象类,则它可以不实现该接口所有的方法。但该抽象类的子类必须实现所有的抽象方法,否则它仍然是抽象类。接口的抽象方法的访问

41、限制符都已制定为 public,所以类在实现方法时,必须显式地使用 public 修饰符,否则将出现缩小方法的访问控制范围的错误。【例 4_11】接口实现示例。interface Animalvoid move();class Bird implements Animalpublic void move()System.out.println (“鸟在飞翔!“);class Beast implements Animalpublic void move()System.out.println (“野兽在奔跑!“);class Fish implements Animalpublic void

42、move()System.out.println (“鱼在游泳!“);class Exam4_11public static void main(String args)new Bird().move();new Beast().move();new Fish().move(); 程序中我们对动物的运动作了抽象,抽象成了接口 Animal,然后分别用Bird、Beast、Fish 类实现了该接口,由于接口中只有一个抽象方法,因此在这些类里面也只实现了这一个抽象方法。程序的运行结果如图 4-11 所示。本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效

43、果最好|减肥瘦身药|http:/图 4-11 例 4_11 程序运行结果4.7 案例继承和多态实例在本节中,我们将描述一棵树,并通过继承来描述一棵柳树,程序如下所示。 class Tree/树的树根public void root()String sSite = “土壤中“;String sFunction = “吸收养份“;print(“位置:“+sSite);print(“功能:“+sFunction);/树的树干public void bolo()String sSite = “地面“;String sFunction = “传递养份“;print(“位置:“+sSite);print(

44、“功能:“+sFunction);/树的树枝public void branch()String sSite = “树干上“;String sFunction = “传递养份“;print(“位置:“+sSite);print(“功能:“+sFunction);本资料由-大学生创业|创业|创业网 http:/ 减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|http:/ void leaf()String sSite = “树梢“;String sFunction = “光合作用“;String sColor = “绿色“;print(“位置:“+sSite);print(“功能:“+sFunction);print(“颜色:“+sColor);/显示信息public void print(Object oPara)System.out.println(oPara);/描述柳树

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报