JAVA 编 程 技 术 主编 贾振华 2010年1月.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
面向对象程序设计 、. 第二章 面向对象的分析与设计 学习目标 1 确定系统中的对象 2 确定对象的属性及操作 3 测试对象的有效性 4 区分对象和类 5 了解面向对象的编程和过程化编程之间的区别 6 了解封装的主要好处 7 了解软件开发的主要步骤.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
项目7 面向对象高级.
项目6 通用堆栈.
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
第二章 JAVA语言基础.
第二部分 Java语言基础篇 第4章 Java语言与面向对象 (之一).
類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法
Ch07 介面與多重繼承 物件導向程式設計(II).
JAVA程序设计 (03) JAVA Programming
第5章 进一步讨论对象和类.
第三章 控制结构.
再回首: Java关键字 数据类型:byte boolean char double float int long short ,
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
mashup 林維甫 郭家伶 吳佩珊 蔡小倩 楊士毅 曾仕豪 Marshup起源 何謂Mashup Mashup類型 Mashup架構
Ch02 視窗Swing套件 物件導向系統實務.
Ch08 巢狀類別 物件導向程式設計(II).
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
2018/11/15 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
Java基础 JavaSE异常.
Classes Lecturer: 曾學文.
第六章 类的扩展与继承.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
CH09 套件 物件導向程式設計(II).
Java软件设计基础 5. 继承与多态.
面向对象程序设计 、.
Java程序设计 第9章 继承和多态.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
Ch01 物件與類別複習 物件導向系統實務.
類別的繼承 Vehicle Car.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
Php class 組員: 賴羿陵 林昱廷 莊正暉 張雅晴
第一章 Java语言概述.
C/C++/Java 哪些值不是头等程序对象
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
简单工厂模式.
辅导课程八.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
龍老師我不會Debug QQ.
辅导课程十一.
第二章 Java基本语法 讲师:复凡.
第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
辅导课程十二.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
判斷(選擇性敘述) if if else else if 條件運算子.
本节内容 在堆中创建对象 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

JAVA 编 程 技 术 主编 贾振华 2010年1月

第4章 JAVA的继承与接口

如果类B具有类A的全部属性和方法,而且又具有自己特有的某些属性和方法,则把类A称作一般类,把类B叫做类A的特殊类。 JAVA 继 承 的 概 念 如果类B具有类A的全部属性和方法,而且又具有自己特有的某些属性和方法,则把类A称作一般类,把类B叫做类A的特殊类。 特殊类却自动地、隐含地拥有它的一般类(以及所有更上层的一般类)中定义的属性和操作。特殊类的对象拥有其一般类的全部或部分属性与方法,称作特殊类对一般类的继承。 轮船具有吨位、时速、吃水线等属性,并具有行驶、停泊等服务;客轮具有轮船的全部属性与服务,又有自己的特殊属性(如载客量)和服务(如供餐等)。若把轮船看做一般类,则客轮是轮船的特殊类。

继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。 JAVA 继 承 的 概 念 继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。 若类B继承类A时,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作)我们称被继承的类A为基类、父类或超类,而称继承类B为A的派生类或子类。父类与子类的层次关系如图所示。

JAVA 继 承 的 概 念 图 父类与子类的层次关系

继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。 提供软件复用功能。 JAVA 继 承 的 特 征 继承关系是传递的。 继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。 提供软件复用功能。 通过增强一致性来减少模块间的接口和界面大大增加程序的易维护性。 提供多重继承机制(非直接提供)。

JAVA 继 承 的 特 征 图 单重继承与多重继承的例子

由继承而得到的类称为子类,被继承的类称为父类(超类)。 声明一个类的子类的格式如下: class 子类名 extends 父类名 { … } JAVA 父 类 与 子 类 由继承而得到的类称为子类,被继承的类称为父类(超类)。 声明一个类的子类的格式如下: class 子类名 extends 父类名 { … } 如果一个类的声明中没有使用extends关键字,是否存在继承关系? Java.lang.Object

JAVA 子类和父类在同一包中的继承性 如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。

JAVA 子类和父类不在同一包中的继承性 如果子类和父类不在同一个包中,那么,子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法,继承的成员或方法的访问权限保持不变。

JAVA 子 类 对 象 的 构 造 过 程 用子类创建对象时,不仅子类中声明的成员变量被分配了内存,而且父类的成员变量也都分配了内存空间,但只将其中一部分(子类继承的那部分)作为分配给子类对象的变量。

JAVA 成 员 变 量 的 隐 藏 对于子类可以从父类继承的成员变量,只要子类中声明的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量,子类自己声明定义的方法操作与父类同名的成员变量是指子类重新声明定义的这个成员变量。

子类可以隐藏从父类继承的成员变量和方法,如果在子类中想使用被子类隐藏的成员变量或方法就可以使用关键字super。 JAVA super 关 键 字 子类可以隐藏从父类继承的成员变量和方法,如果在子类中想使用被子类隐藏的成员变量或方法就可以使用关键字super。

如果在子类的构造方法中,没有明显地写出super关键字来调用父类的构造方法,默认有super(); JAVA 使用 super 关键字调用父类构造方法 子类不继承父类的构造方法,因此,子类如果想使用父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字super来表示,而且super必须是子类构造方法中的头一条语句。 如果在子类的构造方法中,没有明显地写出super关键字来调用父类的构造方法,默认有super();

在子类中想使用被子类隐藏的成员变量或方法就可以使用关键字super。 JAVA 使用 super 操作被隐藏的成员变量和方法 在子类中想使用被子类隐藏的成员变量或方法就可以使用关键字super。 比如super.x、super.play()就是访问和调用被子类隐藏的成员变量x和方法play()。

假设,A类是B类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中时,比如: JAVA 对 象 的 上 转 型 对 象 假设,A类是B类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中时,比如: A a; a = new B(); 或 B b = new B(); a = b; 这时,称对象a是对象b的上转型对象。

JAVA 对 象 的 上 转 型 对 象

不要将父类创建的对象和子类对象的上转型对象混淆。 可以将对象的上转型对象再强制转换到一个子类对象。 JAVA 对 象 的 上 转 型 对 象 不要将父类创建的对象和子类对象的上转型对象混淆。 可以将对象的上转型对象再强制转换到一个子类对象。 不可以将父类创建的对象的引用赋值给子类声明的对象。

用关键字abstract修饰的类称为abstract类(抽象类)。如: abstract class A { … } JAVA abstract 类 和 abstract 方 法 用关键字abstract修饰的类称为abstract类(抽象类)。如: abstract class A { … } 用关键字abstract修饰的方法称为abstract方法(抽象方法),例如: abstract int min(int x,int y);

JAVA abstract 类 假设我们要编写一个计算矩形、三角形和圆的面积与周长的程序,若按前面所学的方式编程,我们必须定义四个类:圆类、三角形类、矩形类和使用前三个类的公共类,它们之间没有继承关系,如图所示。程序写好后虽然能执行,但从程序的整体结构上看,三个类之间的许多共同属性和操作在程序中没有很好地被利用,致使重复编写代码,降低了程序的开发效率,且使出现错误的机会增加。

JAVA abstract 类 图 具有相同特征却彼此独立的几个类

JAVA abstract 类 图 抽象类及其应用

(1) 凡是用abstract 修饰的类被称为抽象类。凡是 用abstract修饰的成员方法被称为抽象方法。 JAVA abstract 类 抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。使用抽象类的一大优点就是可以充分利用这些公共属性来提高开发和维护程序的效率。 对于抽象类与抽象方法的限制如下: (1) 凡是用abstract 修饰的类被称为抽象类。凡是 用abstract修饰的成员方法被称为抽象方法。 (2) 抽象类中可以有零个或多个抽象方法,也可以 包含非抽象的方法。 (3) 抽象类中可以没有抽象方法,但是,有抽象方 法的类必须是抽象类。

(4) 对于抽象方法来说,在抽象类中只指定其 方法名及其类型,而不书写其实现代码。 (5) 抽象类可以派生子类,在抽象类派生的子 JAVA abstract 类 (4) 对于抽象方法来说,在抽象类中只指定其 方法名及其类型,而不书写其实现代码。 (5) 抽象类可以派生子类,在抽象类派生的子 类中必须实现抽象类中定义的所有抽象方 法。 (6) 抽象类不能创建对象,创建对象的工作由 抽象类派生的子类来实现。 (7) 如果父类中已有同名的abstract方法,则子 类中就不能再有同名的抽象方法。

(8) abstract 不能与 final 并列修饰同一个类。 JAVA abstract 类 (8)  abstract 不能与 final 并列修饰同一个类。 (9)  abstract 不能与 private、static、final并 列修饰同一个方法。

abstract类只关心操作,但不关心这些操作具体实现的细节,可以使程序的设计者把主要精力放在程序的设计上,而不必拘泥于细节的实现上。 JAVA abstract 类 与 多 态 abstract类只关心操作,但不关心这些操作具体实现的细节,可以使程序的设计者把主要精力放在程序的设计上,而不必拘泥于细节的实现上。 使用多态进行程序设计的核心技术之一是使用上转型对象,即将abstract类声明对象作为其子类的上转型对象,那么这个上转型对象就可以调用子类重写的方法。

JAVA abstract 类 与 多 态

一个类通过使用关键字implements声明自己实现一个或多个接口。 JAVA 什 么 是 接 口? 为了克服Java单继承的缺点,Java使用了接口,一个类可以实现多个接口。 使用关键字interface来定义一个接口。 interface 接口的名字 接口体 接口体中包含常量定义和方法定义两部分。 接口的使用 一个类通过使用关键字implements声明自己实现一个或多个接口。

接口定义用关键字interface,而不是用class。 接口中定义的数据成员全是final,即常量。 JAVA 定 义 接 口 的 注 意 事 项 接口定义用关键字interface,而不是用class。 接口中定义的数据成员全是final,即常量。 接口中没有自身的构造方法,所有成员方法都是抽象方法。 接口也具有继承性,可以通过extends关键字声明该接口的父接口。

在类中,用implements关键字就可以调用接口。 JAVA 类 实 现 接 口 的 注 意 事 项 在类中,用implements关键字就可以调用接口。 如果实现某接口的类不是abstract的抽象类,则在类的定义部分必须实现指定接口的所有抽象方法。 接口的抽象方法的访问限制符都己指定为public,所以类在实现方法时,必须显式地使用public修饰符。 如果实现某接口的类是abstract的抽象类,则它可以不实现该接口所有的方法。

接口可以增加很多类都需要具有的功能,不同的类可以实现相同的接口,同一个类也可以实现多个接口。 JAVA 理 解 接 口 接口是顶层设计。 接口可以增加很多类都需要具有的功能,不同的类可以实现相同的接口,同一个类也可以实现多个接口。 接口只关心操作,并不关心操作的具体实现。 接口的思想在于它可以增加很多类都需要具有的功能,而且实现相同的接口类不一定有继承关系。

JAVA 回 调 函 数 编程分为两类:系统编程(system programming)和应用编程(application programming)。所谓系统编程,简单来说,就是编写库;而应用编程就是利用写好的各种库来编写具某种功用的程序,也就是应用。系统程序员会给自己写的库留下一些接口,即API(application programming interface,应用编程接口),以供应用程序员使用。所以在抽象层的图示里,库位于应用的底下。

JAVA 回 调 函 数 当程序跑起来时,一般情况下,应用程序(application program)会时常通过API调用库里所预先备好的函数。但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function)。

JAVA 回 调 函 数 打个比方,有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,睡得死怕耽误事的,还可以要求往自己头上浇盆水。这里,“叫醒”这个行为是旅馆提供的,相当于库函数,但是叫醒的方式是由旅客决定并告诉旅馆的,也就是回调函数。而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为登记回调函数(to register a callback function)

JAVA 回 调 函 数 假如你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码(或者留微信,留QQ)就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。

JAVA 回 调 函 数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

JAVA 接 口 回 调 接口回调:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法这一过程称为对象功能的接口回调。 如下例所示:定义一个接口 interface People{    void peopleList(); }

JAVA 接 口 回 调 class Student implements People{ public void peopleList(){ System.out.println("I’m a student."); } class Teacher implements People{ System.out.println("I’m a teacher.");

JAVA 接 口 回 调 public class Example{ public static void main(String args[ ]){ People a; //声明接口变量 a=new Student(); //实例化,接口变量中存放对象的引用 a.peopleList(); //接口回调 a=new Teacher(); //实例化,接口变量中存放对象的引用 } 结果: I’m a student. I’m a teacher.

可以通过在接口中声明若干个abstract方法,表明这些方法的重要性,方法体的内容细节由实现接口的类去完成。 JAVA 接 口 与 多 态 可以通过在接口中声明若干个abstract方法,表明这些方法的重要性,方法体的内容细节由实现接口的类去完成。 使用接口进行程序设计的核心思想是使用接口回调,即接口变量存放实现该接口的类的对象的引用,从而接口变量就可以回调类实现的接口方法。

JAVA 接 口 与 多 态

abstract类和接口都可以有abstract方法。 接口中只可以有常量,不能有变量;而abstract类中即可以有常量也可以有变量。 JAVA abstract类和接口比较 abstract类和接口都可以有abstract方法。 接口中只可以有常量,不能有变量;而abstract类中即可以有常量也可以有变量。 abstract类中也可以有非abstract方法,接口不可以。