第8章 接口与包
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.3包
包在JAVA中的作用: 文件夹将文件和应用程序组织为组,包将类组 织为组。包减少了命名冲突带来的问题,如果所有 类放在同一个包中就容易产生命名冲突 。 引入包以后,声明类前必须声明类所在的包,格 式: package 包1名.包2名…包n名; 例如: package java.awt; 或: package javax.swing.event;
4)接口的特点 接口可以定义多继承。可以通过使用 extends后面的多个父接口名来实现。 接口不存在最高层。 接口中的方法只能被声明为public和abstract。 成员变量只能用public,static,final来定义。如 果不声明,则默认为public static final。 接口中的方法只能是abstract方法,只给出 方法名、返回值和参数表,而不能定义方法体。
第八章 接口、抽象与包
本章内容
抽象类 8.2 接口 8.3 包
8.1
教学目标
理解抽象类和抽象方法,掌握接口的声 明与实现,了解包的声明与引用、系统 程序包。
重点、难点
重点是接口声明与实现,抽象类与抽象
方法。 难点是理解抽象类和抽象方法。
课前思考
什么是抽象类、接口?它们各自又有哪 些特性? 你知道java语言在面向对象编程方面有 何独特的特点吗?
接口不应改变
修改某个接口,为其添加一个方法,这个简单的修改 可能会造成牵一发而动全身的局面:所有实现这个接 口的类都将无法工作,因为现在他们已经不再实现这 个接口了。你要么放弃对这个接口的修改,要么连同 修改所有实现这个接口的所有类。 在设计接口的最初,预测出接口的所有功能,这可能 是不太现实。如果觉得接口非改不行,可以创建一个 新的接口或者扩展这个接口,算是一种折衷的解决方 法。其他相关的类可以保持不变,或者重新实现这个 新的接口。
对于包而言,它的出现使得我们能更好
的管理类文件,对于拥有众多类文件而 苦于无法管理的用户,包的引入恰好解 决了这个问题。而且,可以动态引用类 库文件,节省系统资源。更专注于问题 的处理,避免用户与系统程序间的冲突。
习题
1.填空题 (1)我们可以通过____________,使得处于不 同层次,甚至互不相关的类具有相同的行为, 然后由每个类分别去实现这些行为。 (2)接口声明的关键字是______________。 (3)在声明类的同时,我们可通过关键字 __________________ 实现接口。 (4)使用类实现接口时,必须__________该接 口的所有方法。
√Java类只允许单一继承,即一个类只能继承(extends)一个父类;但一 个类可以实现多个接口,Java支持接口的多重继承。在Java类定义中, 可以同时包括extends子句和implements子句,如果存在extends子句,则 implements子句应跟随extends子句后面。
例2 接口实现
1)接口的定义
接口的定义包括接口声明和接口体。 接口声明的格式如下: [访问权限] interface 接口名[extends 父接口名] { … }
extends 子句与类声明的extends子句基本 相同,不同的是一个接口可有多个父接口,用 逗号隔开,而一个类只能有一个父类。
接口体包括常量定义和方法定义。 常量定义格式为:type NAME=value; 该 常量被实现该接口的多个类共享; 具有 public ,final, static的属性。在接口中只能声明 常量,不可以声明变量。 方法体定义格式为:(具有public和abstract 属性,不能声明为protected) returnType methodName([paramlist]); 注意:在接口的实现类中,实现的接口方 法必须声明为public ,因为接口中定义的方法 为public(默认)。所以其实现必须声明为 public.否则编译不会通过。
8.1.1 定义抽象类
抽象类定义的具体形式为: abstract class 类名称 { 成员变量; 方法(); abstract 方法(); }
说明:抽象类中可以包含一般方法,也可
以包含抽象方法。对于抽象方法不用实 现其代码,而在派生的子类中实现其所 有抽象方法。
抽象方法
作为类方法修饰符,abstract则声明了
如果一个类访问另一个包中的类,必须通过包来引 用,有两种引用方法。
(1) 声明该类前,使用import语句 例如: import java .awt.Button; //Button为被访 问的类,位于包java .awt中 import java .awt.*; //引入包java .awt中 的全部类 (2) 访问另一个包中的类时,使用包名 例如: java .awt.Button b=new java .awt.Button ();
补充
由于接口中不能有初始化块和构建器,
所以在定义有名常量时必须包含初始化 表达式 接口中的方法不能被声明为static,因为 类方法不是抽象的。
2)接口的实现 在类的声明中用implements子句来表示一个类 使用某个接口,在类体中可以使用接口中定义的 常量,而且必须实现接口中定义的所有方法。一 个类可以实现多个接口,在implements子句中用 逗号分开。 3) 接口类型的使用 接口作为一种引用类型来使用。任何实现该接 口的类的实例都可以存储在该接口类型的变量中, 通过这些变量可以访问类所实现的接口中的方法。
一种仅有方法头,而没有具体的方法体 和操作实现的抽象方法。
可见,abstract方法只有方法头的声明, 而用一个分号来代替方法体的定义:至 于方法体的具体实现,那是由当前类的 不同子类在它们各自的类定义中完成的。
需要特别注意的是,所有的抽象方法,都必 须存在于抽象类之中。 除了抽象方法,抽象类也可以有具体的数据 和方法。例如,Person类存储人的名字并且 用一个具体的方法来返回它。 在Java编程语言中抽象方法是非常重要的概 念。在接口里你会大量的用到它。 抽象方法只能出现在抽象类中
8.1 抽象类
什么是抽象 抽象就是抽出事物的本质特性而暂时不 考虑 它们的细节。过程抽象和数据抽 象是常用的两种主要抽象手段。
如何用面向对象的方法实现抽象
一个抽象数据类型(Abstract Data Type, ADT)可以分解成4个部分,如图4-2所 示。语法和语义构成抽象数据类型ADT 的说明,让使用者了解这个抽象数据类 型的特征。属性和方法构成ADT的实现, 展示这个ADT是怎样做成的。
8.1.2 抽象类的实现
科技书类 科技书类 读者群: 科技人员 文艺书类 读者群: 大众显示图书价格 显示图书价格
显示图书种类
显示图书种类
显示图书价格
计算打折折扣
显示图书价格
计算打折折扣
计算打折折扣 计算打折折扣
Shape
Point
Circle
象类来说也不能例外。但是,一个类却 可以实现多个接口。在Java中按照继承 关系,所有的类形成了一个树型的层次 结构,抽象类位于这个层次中的某个位 置。而接口却不曾在这种树型的层次结 构,位于树型结构中任何位置的任何类 都可以实现一个或者多个不相干的接口。
在抽象类的定义中,我们可以定义方法,
并赋予的默认行为。而在接口的定义中, 只能声明方法,不能为这些方法提供默 认行为。抽象类的维护要比接口容易一 些,在抽象类中,增加一个方法并赋予 的默认行为,并不一定要修改抽象类的 继承类。而接口一旦修改,所有实现该 接口的类都被破坏,需要重新修改。
当一个类被声明为abstract时,这个类被称为 是抽象类。所谓抽象类就是没有具体实例对象 的类。 针对这个问题,Java专门提供了一种机制,名 为“抽象方法”。它属于一种不完整的方法, 只含有一个声明,没有方法主体。 人类就是一个典型的抽象类。我们知道,类是 对象的集合,对象是类的实例化,而人类这个 类却不存在一个仅属于它的具体对象。
例1 接口定义
public interface A{ } 也可以用extends去继承已有的接口 public interface A extends B //B是已定义了的接口 { }
在类中使用接口需要使用关键字implements:
//这里A为类,B为接口 }
public class A implements B {
例3接口作为类型
class Worker implements Runnable{ public void run(){ System.out.print("Worker run!"); } } public class Server{ public static void main(String[] args){ Runnable w = new Worker(); (new Thread(w)).start(); } }
进行加减乘除的运算。
2、设计一个包,并在其中创建两个类,
一个类将小写字母变为大写字母,另一
个类将大写字母变为小写字母。然后创
建 一 个 类 , 实 现 将 “ b” 变 为 “ B” 和 将 “E”变为“e”。
下课!
interface A{ int x = 1; void method1(); } interface B extends A{ int x = 2; void method2(); } public class Example implements B{ public void method1(){ System.out.println("x = " + x); System.out.println("A.x = " + A.x); System.out.println("B.x = " + B.x); System.out.println("Example.x = " + Example.x); } public void method2(){ } public static void main(String[] args){ Example d = new Example(); d.method1(); } }
Cylinder
8.2 接口(interface)
接口
接口是抽象类的一种,只包含常量和方法 的定义,而没有变量和方法的实现,且其方法 都是抽象方法。它的用处体现在下面几个方面: ◇ 通过接口实现不相关类的相同行为,而 无需考虑这些类之间的关系。 ◇ 通过接口指明多个类需要实现的方法。 ◇ 通过接口了解对象的交互界面,而无需 了解对象所对应的类。
(5)Java中,我们可通过________来管理
类名空间。 (6)创建包的关键字是:____________。 (7)引入包grade的best类,可使用语句: ____________________________。
2、操作题
1、通过设计一接口,定义有关算术的属
性。并创建四个应用该接口的类,分别
抽象类和接口的比较
抽象类在Java语言中体现了一种继 承关系,要想使得继承关系合理,抽象 类和继承类之间必须存在"是一个(is a)" 关系,即抽象类和继承类在本质上应该 是相同的。而对于接口来说,并不要求 接口和接口实现者在本质上是一致的, 接口实现者只是实现了接口定义的行为 而已。
Java中一个类只能继承一个父类,对抽