面向对象编程接口和抽象类

上传人:tian****1990 文档编号:71612897 上传时间:2019-01-21 格式:PPT 页数:44 大小:790KB
返回 下载 相关 举报
面向对象编程接口和抽象类_第1页
第1页 / 共44页
面向对象编程接口和抽象类_第2页
第2页 / 共44页
面向对象编程接口和抽象类_第3页
第3页 / 共44页
面向对象编程接口和抽象类_第4页
第4页 / 共44页
面向对象编程接口和抽象类_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《面向对象编程接口和抽象类》由会员分享,可在线阅读,更多相关《面向对象编程接口和抽象类(44页珍藏版)》请在金锄头文库上搜索。

1、第四章 面向对象编程,本章主要内容,4.1 简介 4.2 面向对象的基本概念 4.3 面向对象的基本语法 4.4 类和包 4.5 对象 4.6 继承和多态 4.7 接口和抽象类 4.8 面向对象开发概念 4.9 总结,课程回顾,在继承中,一般常见的有那些技术 方法的覆盖和重载的区别,在继承中,一般常见的有:属性继承,属性隐藏,方法继承,方法覆盖,方法重载等技术,方法覆盖 返回值,参数,函数名完全一致 函数覆盖的时候,只有子类的函数可以被引用 一般用在希望完全摒弃父类函数,重写函数代码的情况 方法重载 只有参数不一致的情况下,子类的函数重载父类的函数 子类和父类的函数是不同的函数,可以被同时引用

2、 一般用在扩充父类函数功能,同时保留古老的父类函数,4.7 接口和抽象类,控制复杂性是计算机编程的本质. Brian Kernigan (Unix操作系统的先驱 ),4.7.1 抽象类,java语言中,用abstract 关键字来修饰一个类时,这个类叫做抽象类 用abstract 关键字来修饰一个方法时,这个方法叫做抽象方法 格式如下: 抽象类 抽象方法,public abstract class abstractClass ,abstract returnType abstractMethod(paramlist);,4.7.1 抽象类,抽象类声明时采用的语法: 例子:人类是个很典型的抽象类

3、 参看课本例4.18 错误的声明方法: 参看课本例4.19,public abstract class Person private String name; public abstract String getDescription(); public String getName() return name; ,Person person = new Person();,抽象类,抽象方法,抽象类是不能实例化对象的,修饰符 abstract class 类名,4.7.2 抽象方法,抽象方法也是由abstract修饰,它属于一种不完整的方法,只含有一个声明,没有方法主体。 语法: 抽象方法作为

4、抽象类重要的组成部分,它通常描述这各个子类都拥有但又彼此互不相同的方法。,访问修饰符 abstract 返回值类型 方法名();,4.7.1 抽象类,抽象类不能被实例化 若类中包含了抽象方法,则该类必须被定义为抽象类,public abstract class Person private String name; public abstract String getDescription(); public String getName() return name; public Person(String n) name = n; ,public class Employee extend

5、s Person private double salary; public Employee(String n, double s) / 传递信息到父类构造函数 super(n); salary = s; public double getSalary() return salary; public String getDescription() return “员工的工资是:“ + salary; ,抽象类必须被继承,抽象方法必须被重写,抽象方法只需声明,无需实现,抽象类不一定要包含抽象方法,4.7.2 抽象方法,例:完整的抽象类实例: 参看课本例4.20,4.7.3 接口,接口(Inte

6、rface)是对符合接口需求的类的一套规范 接口主要作用是可以帮助实现类似于类的多重继承的功能。 Java中声明接口的语法如下:,4.7.3 接口,一个Java接口是一些方法特征的集合,但没有方法的实现 接口是由常量和抽象方法组成的特殊类 参看例4.21,public interface Shape public abstract double area(); public abstract double volume(); public abstract String getName(); ,这是Java接口,4.7.3 接口,public class Point extends Objec

7、t implements Shape / 返回面积 public double area() return 0.0; / 返回体积 public double volume() return 0.0; / 返回类名称 public String getName() return “Point“; ,Java接口中定义的方法在不同的地方被实现 可以具有完全不同的行为 参看课本例4.22,4.7.3 接口,接口的定义 接口的定义包括接口声明和接口体 接口体包括常量定义和方法定义 接口的实现 在类的声明中用implements子句来表示一个类使用某个接口 在类体中可以使用接口中定义的常量,而且必须实

8、现接口中定义的所有方法 一个类可以实现多个接口,在implements子句中用逗号分开 接口类型的使用 接口作为一种引用类型来使用 任何实现该接口的类的实例都可以存储在该接口类型的变量中,通过这些变量可以访问类所实现的接口中的方法,接口特性,接口可以多重实现 接口可以继承其它的接口,并添加新的属性和抽象方法 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。 通过接口可以指明多个类需要实现的方法。 通过接口可以了解对象的交互界面,而不需了解对象所对应的类 与继承关系类似,接口与实现类之间存在多态性,生活中的接口,电脑主板上的PCI插槽的规范就类似于Java接口,声卡,显卡,

9、网卡,每种卡的内部结构都不相同,可以把声卡、网卡、显卡都插在PCI插槽上,而不用担心哪个插槽是专门插哪个卡的,主板,什么是Java接口 2-1,一个Java接口是一些方法特征的集合,但没有方法的实现,public interface PCI public void start(); public void stop(); ,class SoundCard implements PCI public void start() System.out.println(“Du du.“); public void stop() System.out.println(“Sound stop!“); ,J

10、ava接口中定义的方法在不同的地方被实现,可以具有完全不同的行为,这是Java接口,相当于主板上的PCI插槽的规范,class NetworkCard implements PCI public void start() System.out.println(“Send.“); public void stop() System.out.println(“Network stop!“); ,声卡、网卡都实现了PCI插槽的规范,但行为完全不同,什么是Java接口 2-2,public class Assembler public static void main(String args) PCI

11、 nc = new NetworkCard(); PCI sc = new SoundCard(); nc.start(); sc.start(); ,可以使用Java接口标识类型 运行时,根据实际创建的对象类型调用相应的方法实现,Du du. Send.,控制台输出,2,1,为什么需要Java接口 5-1,为班级开发这样一个小系统,包含类型:学生、老师、打印机,具体要求如下: 学生、以及老师都具有方法:输出详细信息 老师具有属性:打印机,能够通过老师的打印机打印学生或老师的详细信息 系统要具备良好的可扩展性与可维护性,打印,学生,老师,老师 详细信息,学生 详细信息,detail方法 (输出

12、详细信息),为什么需要Java接口 5-2,以下这个解决方案中存在着什么问题?,public class Student1 /输出学生的详细信息 public String detail() return “本人是学生“; ,public class Teacher1 private Printer printer = new Printer(); /输出老师的详细信息 public String detail() return “这里是老师“; /使用打印机打印学生信息 public void print(Student s) printer.print(s.detail(); /使用打印机

13、打印老师信息 public void print(Teacher t) printer.print(t.detail(); ,public class Printer public void print(String content) System.out.println(“开始打印:“); System.out.println(content); ,每增加一种新类型,都需要增加相应的print(类型名称 var)方法 程序的可扩展性及可维护性极差 这不符合系统的要求,为什么需要Java接口 5-3,可以通过多态性解决这个问题吗?,显然,本系统符合使用多态性的条件,教员,中心,detail方法

14、 (负责输出详细信息),学生 详细信息,老师 详细信息,1,2,2,1,回顾多态的含义: 实现同一个接口,使用不同的实例而执行不同操作,为什么需要Java接口 5-4,在这个系统中,存在继承关系吗? 学生、老师属于两种不同的类型,无法通过“is-a”找到一个合适的父类 学生、老师都存在一个共同的方法特征:detail,它们对detail方法有各自不同的实现这完全符合Java接口的定义,定义一个Java接口,在其中定义detail方法,但没有具体实现,实现这个Java接口,不同的类对detail方法有不同的具体实现,为什么需要Java接口 5-5,public interface Introdu

15、ceable public abstract String detail(); ,public class Teacher implements Introduceable private Printer printer = new Printer(); /输出中心的详细信息 public String detail() return “这里是老师“; /使用中心打印机打印信息 public void print(Introduceable intro) printer.print(intro.detail(); ,public class Student implements Introduceable /输出教员的详细信息 public String detail() return “本人是学生“; ,通过Java接口,我们同样可以享受到多态性的好处,大大提高了程序的可扩展性及可维护性,使用print方法时,参数可以是任何Introduceable接口的实现类的对象,不必再为不同的类型建立不同的print方法了,使用了Java接口之后,这个系统有了怎样的改进?,什么是面向接口编程,开发系统时,主体构架使用接口,接口构成系统的骨架 这样就可以通过更换接口的实现类来更换系统的实现,public class Teach

展开阅读全文
相关资源
相关搜索

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

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号