Java程序设计 第10章 抽象类和接口.

Slides:



Advertisements
Similar presentations
主要内容 Java 的常用包 Java 的常用包 “ == ” 和 “ equals ” 的用法 “ == ” 和 “ equals ” 的用法 基本数据类型与引用类型 基本数据类型与引用类型 String 和 StringBuffer String 和 StringBuffer 对象的克隆( clone.
Advertisements

第四章 类、对象和接口.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
Chapter 4 Advanced Class Features
项目6 通用堆栈.
第4章 类与对象 本章导读 0. 面向对象编程 1. 类声明和类体 2. 类体的构成 3. 构造方法与对象的创建 4. 对象的引用与实体
面向对象的程序设计(一).
第二章 JAVA语言基础.
Ch07 介面與多重繼承 物件導向程式設計(II).
重庆大学计算机学院 《Java程序设计之网络编程》 教学课件 重庆大学计算机学院
Programming in JAVA 第7章 类的继承性(下) 接口与多态.
第14章 c++中的代码重用.
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
第5章 进一步讨论对象和类.
第六章 JAVA语言中的面向对象特性 6.1 类 6.2 对象 6.3 面向对象的特性 6.4 抽象类、接口和Inner Class.
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
第九章 字符串.
程設一.
JAVA语言程序设计 第七章 类的继承性 (上).
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
第4章 回顾 1.面向对象的三大特征:封装、继承、多态 2.类与对象的关系:类是对象的模板,对象是类的实例,类只能通过对象才可以使用。 3.类的组成:属性、方法、构造方法、代码块、内部类 4.创建对象的格式:类名称 对象名称=new 类名称() 5.类属于引用数据类型。进行引用传递时,传递的是堆内存的使用权。
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
Classes Lecturer: 曾學文.
第六章 类的扩展与继承.
辅导课程十六.
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
JAVA程序设计 第5章 深入理解JAVA语言----补充.
程式設計實作.
Java软件设计基础 5. 继承与多态.
Java习题解析.
Java程序设计 第9章 继承和多态.
辅导课程六.
辅导课程十三.
類別的繼承 Vehicle Car.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
Java程序设计 第2章 基本数据类型及操作.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
專題報告p6 組員:吳家齊    江弘喻.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二章 Java基本语法 讲师:复凡.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
$9 泛型基础.
Java變數 2014/6/24.
C#面向对象程序设计 $6 深入理解类.
Aspect Oriented Programming
第二章 Java基本语法 讲师:复凡.
Interfaces and Packages
第二章 Java语法基础.
Review 1~3.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
辅导课程十五.
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第 5 章 常用类的使用 伍孝金
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第二章 Java基础语法 北京传智播客教育
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第6章 继承和多态 伍孝金
第二章 简单数据类型 §2.1 数据类型概述 §2.2 变量和常量 §2.3 简单数据类型 §2.4 简单数据类型的相互转换
Summary
Presentation transcript:

Java程序设计 第10章 抽象类和接口

学习目标 设计和使用抽象类 掌握接口的声明和实现 了解抽象类和接口的异同 掌握基本数据类型的包装类型 了解JDK1.5中基本数据类型与包装类型的自动转换

抽象类和抽象方法 Java中可以定义不含方法体的方法,方法的方法体由该类的子类根据自己的情况去实现,这样的方法称为抽象方法(abstract method),包含抽象方法的类必须是抽象类(abstract class)。 一个类C如果满足下面的任一条件,则该类包含抽象方法: 类C显式地包含一个抽象方法的声明; 类C的父类中声明的抽象方法未在类C和它的父类中实现; 类C的父接口中声明或继承一个方法,并且类C中未声明或继承一个方法来实现它。

注意 抽象类和抽象方法必须用abstract关键字来修饰。 只有实例方法可以声明为抽象方法。 抽象类不能被实例化,即不能用new关键字创建对象。 抽象类的父类可以是具体类。 具体子类必须实现抽象父类中所有抽象方法,否则子类需要声明为抽象类。

抽象类示例 Example:GeometricObject.java,Circle.java, Rectangle.java, - radius : double + <<Override>> getRadius () setRadius (double radius) getArea () getPerimeter () toString () : void : String GeometricObject color filled : boolean getColor () setColor (String color) isFilled () setFilled (boolean filled) Rectangle width height getWidth () setWidth (double width) getHeight () setHeight (double height) Example:GeometricObject.java,Circle.java, Rectangle.java, TestGeometricObject.java

接口 接口是常量和抽象方法的集合。接口是能力、规范、协议的反映。 语法 接口中的数据字段隐含为public static final [modifier] interface interfaceName { constant_declaration* abstract_method_declaration* } 接口中的数据字段隐含为public static final 接口体中的方法隐式地声明为public abstract

使用接口 可以在能够使用任何其他数据类型的地方使用接口。 接口类型属于引用类型,接口类型的变量可以存储: 类实现接口的语法 空引用(null) 任何实现该接口的类的实例的引用 类实现接口的语法 [modifier] class className [extends superclass] [implements interfaceNameList ] { member_declaration* } 除非类被声明为abstract,所有父接口中声明的成员方法必须被实现,或者通过在类中声明或者通过从父类继承已有的方法声明。

例1 public interface Flyer { void takeOff(); void land(); void fly(); } public class Airplane implements Flyer { public void takeOff() { // 加速直到离地升空 // 收起起落架 public void land() { // 放下起落架 // 减速并降低副翼直到降落 // 刹车 public void fly() { // 保持引擎运转

例2

例3

例4

接口继承 一个接口可以继承多个接口。 语法 [modifier] interface interfaceName [extends interfaceNameList] { declaration* } 如果接口声明中提供了extends子句那么该接口就继承了父接口的成员类型、方法和常量。这些接口称为声明接口的直接父接口。 任何实现该接口的类,必须实现该接口继承的其他接口。

接口和抽象类的比较 接口 抽象类 多重继承 方法 数据字段 现有类 含义 适用性 简洁性 添加功能 一个类可以实现多个接口 一个类只能扩展一个抽象类 方法 接口不能提供任何代码 抽象类可以提供完整代码、缺省代码以及用于覆盖的存根。 数据字段 只包含public static final常量,常量必须在声明时初始化。 可以包含实例变量和静态变量。静态和实例初始化代码可用于常量计算。 现有类 任何现有的类都可以添加一个接口的实现 现有类必须重写,只从抽象类派生 含义 接口通常用于描述一个类的外围能力,而不是核心特征,例如Automobile类可以实现Recyclable接口,而Recyclables可以应用于其他不相关的对象。类与接口之间的是-able或者can do的关系。 抽象类定义了它的后代的核心特征。例如Person类包含了Student类的核心特征。派生类与抽象类之间是is-a的关系。 适用性 所有的实现只是共享方法签名 所有实现大同小异,并且共享状态和行为 简洁性 接口中的常量都被假定为public static final,可以省略。不能调用任何方法计算这些常量的初始值。接口中的方法被假定为public abstract。 可以在抽象类中放置共享代码。可以使用方法来计算实例和静态变量(常量)的初始值。必须用abstract显式声明方法为抽象方法。 添加功能 如果为接口添加一个新的方法,则必须查找所有实现该接口的类,并为他们逐一提供该方法的实现。 如果为抽象类提供一个方法,可以选择提供一个缺省的实现,那么所有已存在的代码不需要修改就可以继续工作。

基本数据类型的包装类 作用 包装类的对象的值是不变的 为基本数据类型提供方法和常量值 用于只能处理对象引用的地方 Comparable Object Number Character Boolean Byte Short Integer Long Float Double

构造函数与通用方法 构造函数 通用方法 以一个对应的基本数据类型为参数 以字符串为参数(除了Character) public static Type valueOf(String str) public String toString() public type typeValue() public int compareTo(Type other) public int compareTo(Object obj) public boolean equals(Object obj) public int hashCode()

Number 方法 public abstract int intValue() public abstract long longValue() public abstract float floatValue() public abstract double doubleValue() public byte byteValue() public short shortValue()

整数包装类 Byte, Short, Integer, Long 方法 public static type parseType(String s) public static type parseType(String s, int radix) public static Type valueOf(String s, int radix) public static String toString(type val, int radix) public static String toHexString(type val) public static String toOctalString(type val) public static String toBinaryString(type val)

浮点包装类 Float, Double 常量 方法 POSITIVE_INFINITY NEGATIVE_INFINITY NAN public boolean isInfinite() public boolean isNaN() public static type parseType(String s) public static String toString(int i)

例 排序对象数组 编写程序,对Comparable对象数组进行排序。 Example:GenericSort.java

基本类型与包装类之间的自动转换 JDK1.5允许基本类型和包装类之间的自动转换。 将基本类型的值转换为包装类对象,称为装箱(boxing) 将包装类对象转换为基本类型的值,称为开箱(unboxing) Integer intObject = 2; 等价于 Integer intObject = new Integer(2);