《第4章-抽象类和接口》由会员分享,可在线阅读,更多相关《第4章-抽象类和接口(22页珍藏版)》请在金锄头文库上搜索。
1、JavaJava面向对象基础面向对象基础面向对象基础面向对象基础第第第第4 4章章章章 抽象类抽象类抽象类抽象类 接口接口接口接口8 8 2 6 9 9 0 0WWW.ZT-IT.COM知识回顾知识回顾什么是继承?什么是继承?如何实现继承?如何实现继承?继承中的类型关系继承中的类型关系8 8 2 6 9 9 0 0WWW.ZT-IT.COM目标目标理解抽象类和接口的概念理解抽象类和接口的概念掌握抽象类和接口的使用掌握抽象类和接口的使用掌握抽象类与接口之间的区别掌握抽象类与接口之间的区别8 8 2 6 9 9 0 0WWW.ZT-IT.COM宠物类宠物类属性:名字,年龄属性:名字,年龄方法:叫,
2、吃方法:叫,吃由一个类继承层次结构图想到的?由一个类继承层次结构图想到的?我要开发一个网我要开发一个网上宠物商店。恩,上宠物商店。恩,我应该使用面向我应该使用面向对象的思路来进对象的思路来进行设计行设计狗类狗类汪汪叫汪汪叫吃骨头吃骨头猫类猫类喵喵叫喵喵叫吃鱼吃鱼猫和狗的方法比较好实现(具体)猫和狗的方法比较好实现(具体)但是宠物类的方法怎么实现?但是宠物类的方法怎么实现?如果仅仅留着空方法,也会让客户产生误会如果仅仅留着空方法,也会让客户产生误会8 8 2 6 9 9 0 0WWW.ZT-IT.COM继承层次结构图分析继承层次结构图分析 - 1从下往上看继承层次结构图,类逐渐变得更通用从下往上
3、看继承层次结构图,类逐渐变得更通用也更抽象也更抽象 越越来来越越抽抽象象越越来来越越具具体体8 8 2 6 9 9 0 0WWW.ZT-IT.COM继承层次结构图分析继承层次结构图分析 - 2在在Animal类中无法为类中无法为eat()方法创建有意义的实现方法创建有意义的实现过程过程有时我们需要这样的基类,他提供一部分(或者有时我们需要这样的基类,他提供一部分(或者压根没有提供)被子类共享的内容,而更多的内压根没有提供)被子类共享的内容,而更多的内容是等待子类自己去补充实现的。这样的类,我容是等待子类自己去补充实现的。这样的类,我们称之为抽象类们称之为抽象类8 8 2 6 9 9 0 0WW
4、W.ZT-IT.COM现实生活中的情况现实生活中的情况全国人民代表大会通过决议,要全面建设小康社会全国人民代表大会通过决议,要全面建设小康社会怎么整?留着给你具体实现怎么整?留着给你具体实现中国奥运代表团出征大会,国家体育局领导发言:中国奥运代表团出征大会,国家体育局领导发言:希望各位赛出水平,赛出风格,争金夺银希望各位赛出水平,赛出风格,争金夺银怎么整?留给各位运动员自己领会怎么整?留给各位运动员自己领会8 8 2 6 9 9 0 0WWW.ZT-IT.COM抽象类和抽象方法抽象类和抽象方法 - 1定义抽象类的目的就是为了让别人继承,并按抽定义抽象类的目的就是为了让别人继承,并按抽象类中定义
5、的方案,来给出具体的设计象类中定义的方案,来给出具体的设计使用关键字使用关键字abstract来声明抽象类来声明抽象类 abstractabstract class Animal class Animal /抽象类抽象类 8 8 2 6 9 9 0 0WWW.ZT-IT.COM抽象类和抽象方法抽象类和抽象方法 - 2抽象类通常包含抽象类通常包含0个或多个抽象方法个或多个抽象方法抽象方法表明该抽象类的子类必须提供此方法的抽象方法表明该抽象类的子类必须提供此方法的具体实现具体实现 使用关键字使用关键字abstract来声明抽象方法来声明抽象方法 abstractabstract class Ani
6、mal class Animal /抽象类抽象类 public public abstractabstract void eat(); void eat(); /抽象方法抽象方法 1.1.抽象方法只有方法的声明,没有方法体抽象方法只有方法的声明,没有方法体 2.2.抽象方法用来描述系统具有什么功能抽象方法用来描述系统具有什么功能3.3.具有一个或多个抽象方法的类必须声明为抽象类具有一个或多个抽象方法的类必须声明为抽象类 8 8 2 6 9 9 0 0WWW.ZT-IT.COM抽象类和抽象方法抽象类和抽象方法 - 3抽象类也可以有具体的属性和方法抽象类也可以有具体的属性和方法构造方法不能声明为抽
7、象方法构造方法不能声明为抽象方法 abstract class Animal abstract class Animal /抽象类抽象类 private String name; private String name; /属性属性 public Animal(String n) public Animal(String n) /构造方法构造方法 name = n;name = n; public abstract void eat(); public abstract void eat(); /抽象方法抽象方法 public String getName() public String ge
8、tName() /具体方法具体方法 return name;return name; 8 8 2 6 9 9 0 0WWW.ZT-IT.COM抽象类和抽象方法抽象类和抽象方法 - 4当一个具体类继承一个抽象类时,必须实现抽象当一个具体类继承一个抽象类时,必须实现抽象类中声明的所有抽象方法,否则也必须声明为抽类中声明的所有抽象方法,否则也必须声明为抽象类象类 class Dog extends Animal public Dog(String n) :base(n) /子子类的构造方法类的构造方法 public void eat() /实现基类的抽象方法实现基类的抽象方法 System.out.
9、println(name + 啃骨啃骨头头); class Cat extends Animal public Cat(String n) super(n) public void eat() System.out.println(name + 吃鱼吃鱼); Cat cat = new Cat(Cat cat = new Cat(咪咪咪咪););cat.eat();cat.eat();Dog dog = new Dog(Dog dog = new Dog(非非非非););dog.eat();dog.eat();8 8 2 6 9 9 0 0WWW.ZT-IT.COM抽象类和抽象方法抽象类和抽象
10、方法 - 5不能通过不能通过new关键字实例化抽象类的对象关键字实例化抽象类的对象 Animal animal = new Animal(Animal animal = new Animal(非非非非); ); /错误错误但可以声明抽象类的引用指向子类的对象,以实但可以声明抽象类的引用指向子类的对象,以实现多态性现多态性Animal animal = new Dog(Animal animal = new Dog(非非非非); ); /正确正确animal.eat();animal.eat();8 8 2 6 9 9 0 0WWW.ZT-IT.COM小结小结 抽象类抽象类抽象类用于描述继承体系
11、的上层结构抽象类用于描述继承体系的上层结构抽象类定义的目的就是为了让别人去继承抽象类定义的目的就是为了让别人去继承一个抽象类可以有具体属性一个抽象类可以有具体属性一个抽象类可以有一个抽象类可以有 0 - * 抽象方法抽象方法一个抽象类可以有一个抽象类可以有 0 - * 非抽象方法非抽象方法继承一个抽象类,但是没有全部实现抽象类的全继承一个抽象类,但是没有全部实现抽象类的全部抽象方法,那么也必须声明为抽象类部抽象方法,那么也必须声明为抽象类8 8 2 6 9 9 0 0WWW.ZT-IT.COM引入引入 接口接口 - 1我们看一下电源插座我们看一下电源插座表面看上去,我无法知道这个塑料壳子后面具
12、体的表面看上去,我无法知道这个塑料壳子后面具体的样子(具体实现)样子(具体实现)但是我从它的样子上看出,可以把二眼插头插进去但是我从它的样子上看出,可以把二眼插头插进去无论我到什么地方,看到这样的插座(不管壳子后无论我到什么地方,看到这样的插座(不管壳子后面怎么实现的),我就知道,他支持二眼插头面怎么实现的),我就知道,他支持二眼插头8 8 2 6 9 9 0 0WWW.ZT-IT.COM威迅教育开发部监制引入引入 接口接口 - 28 8 2 6 9 9 0 0WWW.ZT-IT.COM面向对象设计中的接口面向对象设计中的接口通过接口来调用服务的好处是,只要接口不变,通过接口来调用服务的好处是
13、,只要接口不变,服务提供者改变的话,只要还实现相同的接口,服务提供者改变的话,只要还实现相同的接口,那么调用者就无需改变那么调用者就无需改变调用者调用者服务提供者服务提供者接接口口提供服务的模块提供服务的模块调用服务的模块调用服务的模块通过接口通过接口调用服务调用服务实现此接口实现此接口所必须的服务所必须的服务8 8 2 6 9 9 0 0WWW.ZT-IT.COM类与接口类与接口一个类只能有一个直接的基类一个类只能有一个直接的基类但是可以实现多个接口但是可以实现多个接口通信设备通信设备手机手机打电话打电话发短信发短信8 8 2 6 9 9 0 0WWW.ZT-IT.COM接口语法接口语法使用
14、关键字使用关键字interface接口中的方法只能是公共方法接口中的方法只能是公共方法接口中方法的主体替换成分号(抽象方法)接口中方法的主体替换成分号(抽象方法)interface IComparable int CompareTo(object obj);8 8 2 6 9 9 0 0WWW.ZT-IT.COM实现接口实现接口实现接口遵循的原则:实现接口遵循的原则:方法和返回类型完全匹配。方法和返回类型完全匹配。任何参数完全匹配。任何参数完全匹配。使用接口作为方法名的前缀。使用接口作为方法名的前缀。假如使用显式接口实现,方法不应该有一个访问修饰符。假如使用显式接口实现,方法不应该有一个访问修
15、饰符。8 8 2 6 9 9 0 0WWW.ZT-IT.COM比较抽象类与接口比较抽象类与接口 - 1共同点共同点代表系统的抽象层代表系统的抽象层都不能被实例化都不能被实例化 都能包含抽象方法但不提供具体的实现都能包含抽象方法但不提供具体的实现 8 8 2 6 9 9 0 0WWW.ZT-IT.COM比较抽象类与接口比较抽象类与接口 - 2主要区别主要区别在抽象类中可以有非抽象方法,而接口中只能包含抽在抽象类中可以有非抽象方法,而接口中只能包含抽象方法象方法向抽象类中添加一个具体的方法,不会对它的子类造向抽象类中添加一个具体的方法,不会对它的子类造成影响,而对于接口,一旦公布就不应被改变成影响
16、,而对于接口,一旦公布就不应被改变一个类只能继承一个直接的父类,这个父类可能是抽一个类只能继承一个直接的父类,这个父类可能是抽象类;但一个类可以实现多个接口象类;但一个类可以实现多个接口 8 8 2 6 9 9 0 0WWW.ZT-IT.COM总总 结结在定义一个类时如果不打算创建该类的对象,而仅仅在定义一个类时如果不打算创建该类的对象,而仅仅是将它作为一个基类,我们可以将它声明为抽象类。是将它作为一个基类,我们可以将它声明为抽象类。抽象类通常包含一个或多个抽象方法,抽象方法由继抽象类通常包含一个或多个抽象方法,抽象方法由继承抽象类的子类提供具体的实现。承抽象类的子类提供具体的实现。接口就是需
17、要由其他类实现的行为模板。在抽象类没接口就是需要由其他类实现的行为模板。在抽象类没有可供继承的默认实现时,一般可以用接口来替代该有可供继承的默认实现时,一般可以用接口来替代该抽象类。抽象类。要使用接口,必须指定该接口的实现类,并且该类必要使用接口,必须指定该接口的实现类,并且该类必须按照接口声明中所指定的方法特征来实现该接口中须按照接口声明中所指定的方法特征来实现该接口中的所有方法。的所有方法。接口和抽象类都位于类的继承层次结构的上层,并且接口和抽象类都位于类的继承层次结构的上层,并且都不能实例化,但可以声明接口或抽象类的变量来引都不能实例化,但可以声明接口或抽象类的变量来引用子类或实现类的对象用子类或实现类的对象。