第4章 类的继承和接口
Java开发基础PPT课件

使用JDK库实现常用算法及函数 数值类型的自动转换规则 强制类型转换及截位 枚举类型的使用
字符串
字符串
代码点与代码单元 字符子串与拼接 相等的比较
注意事项
编码转换方法 子串下标计算 拼接的性能 String 方法 intern() 的应用
注释
注释
单行注释 多行注释 文档注释
–32,768 to 32,767
–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
1 byte
–128 to 127
Type float double
Storage Requirement 4 bytes
8 bytes
Range
approximately ±3.40282347E+38F (6–7 significant decimal digits)
大纲
☞ 对象构造顺序
方法参数传递:按值调用 类设计基本原则
对象构造顺序
对象构造顺序
类装载时,按类声明中出现的次序执行静态初始化块或静态初始化 语句。
对象构造时: 所有数据域初始化为默认值 按类声明中出现的次序执行初始化块或初始化语句。 如果构造器第一行调用了第二个构造器,则跳转到第二个构造器 中执行,直到返回。 执行这个构造器的主体部分。
Java开发基础
目录
☞ 第1章 Java体系结构
第2章 基本程序结构设计 第3章 对象与类 第4章 继承 第5章 接口与内部类 第6章 事件处理 第7章 异常与调试 第8章 流与文件
Java体系结构
Java体系结构包括如下四大类技术:
Java程序设计语言 Java class文件格式 Java API Java 虚拟机
第四章 面向对象编程(三)

43
定义类CCircle实现接口
Class CCircle implements CircleCal{ double clength(double r){ return 2*PI*r; } double carea(double r){ return PI*r*r; }
44
5.没有实现父类中所有抽象方法的类,也是抽象类。
8
抽象类实例
public abstract class Car{
private double price;
pribate String brand;
private int speed;
public class CarDemo{
}
public static void main(String[] args){ 抽象类不 Car c=new Car(); }}//编译能否通过?? 能被实例 化
抽象类练习:
定义一个描述宠物的抽象类Pet,包含重 量(weight)和年龄(age)两个成员变 量和显示宠物资料的showInfo和获取宠 物资料的getInfo两个抽象方法。
19
生活中的接口
电脑主板上的PCI插槽的规范就类似于Java 接口
声卡
网卡
主板
显卡
每种卡的内部结构都不相同,可以把声卡、 网卡、显卡都插在PCI插槽上,而不用担心哪 个插槽是专门插哪个卡的
41
练习:
创建一个接口 CircleCal,其中有: 一个数据成员 pi=3.1415 一个方法 clength,求圆周长 一个方法 carea,求园面积 一个方法 cvolum,求球的体积 并创建一个类CCircle ,实现该接口
Java开发基础 PPT课件

大纲
接口与抽象类的选择
☞ 克隆及其注意事项
接口与回调 内部类、局部类、匿名类 JDK的Proxy与CGLib的动态代理区别
克隆及其注意事项
浅克隆与深克隆
默认实现是浅克隆(本地方法实现)(java.util.AbstractMap默 认实现是浅克隆)
如果原始对象与浅克隆对象共享的子对象是不可变的,则不 会产生负面问题。
反射
允许程序在运行时透过Reflection APIs取得任何一个已知名称的class 的内部信息,并可于运行时改变fields内容或唤起 methods。
可动态获取的内容包括
modifiers(诸如public, static ) superclass(例如Object) interfaces(例如Cloneable fields和methods等
的属性 Java 中所有的对象都继承至 ng.Object ,因此都拥有
toString() , equals() ,wait() 等方法
继承的约束
不能实现多继承 父类提供了参数构造函数,子类必须实现 子类不能降低父类方法的可见域 子类不能抛出比父类构造函数或方法更多的异常 子类不能扩展父类的 final 方法
象类不应该依赖于其细节,细节。 接口隔离原则(ISP):不应该强迫客户依赖于它们不用的方
法
类设计基本原则(续)
包设计的基本原则
包内聚性原则(包粒度) 重用发布等价原则(REP):重用的粒度就是发布的粒度。 共同重用原则(CRP):一个包中的所有类应该是共同重用的。 如果重用了包中的一个类,那么就要重用包中的所有类。 共同封闭原则(CCP):包中的所有类对于同一类性质的变化应 该是共同封闭的。一个变化若对一个包产生影响,则将对该包中 的所有类产生影响,而对于其它的包不造成任何影响。 考虑可重用性与可开发性的平衡。
第四章 面向对象编程

2.2
值类型与引用类型
C/C++有指针类型,而数组、结构体、类 这些数据类型本质上都是指针。因此C/C++ 数据类型可划分为基本类型和指针类型两 大类 从 C# 类的方法参数传递我们看到,引用 实际上就是指针的改头换面 。 C# 数据类型也可划分为值类型和引用类型 两大类, 但它和C/C++有所不同, C#所有数 据类型都是对象化的, 也就是说都是类 但类也有不同, 它们在内存中的位置和引 用方法可以是不一样的
out 引用的例子
P73 例题 4-8 class Program { public static void MyMethod(out int a, out int b) { a = 5; b = 6; } //函数中赋值 static void Main() { int x, y; MyMethod( out x, out y ); //引用时无初值 Console.WriteLine ( "调用MyMethod后,x={0},y={1}", x, y); Console.ReadLine(); } }
3.3 派生类对基类方法的覆盖
覆盖:在派生类用与基类相同的方法名和参 数表写一个新方法 ,是多态性的体现。 覆盖只对派生类和派生类的派生类有效,对 基类无效 。 基类的方法必需声明为 virtual(P82 ), 表示该方法(或属性)可以被覆盖。 覆盖时派生类的方法必需声明为 override 派生类的方法名和参数表必需与基类一致 派生类用关键字 base .方法名( ),可以调用 基类被覆盖的方法。
关于构造函数(构造方法)
基本上和 Java 一样,一般声明为 public 如果没有自己声明的构造方法,系统会自动 提供一个默认构造方法对类进行初始化。 构造方法与类同名,没有返回值。 支持重载,可以声明多个构造方法。 本书中将类的属性(或成员变量)称为“字 段”,我们课中一般称为“成员变量”或 “属性”。 成员变量的默认初始化:数值类型为 0; bool 类型为 false;引用类型为 null。
第四章Java面向对象特性课件

对象的基本概念
面向对象程序语言三个关键特点: 封装 ( Encapsulation ) 多态 ( Polymorphism ) 继承 ( Inheritance )
1
第4章 Java面向对象特性
抽象数据类型
基本数据类型和聚集类型的变量与一些操作 (如+, -)之间不需特殊的联系。 在面向对象语言中,在数据类型的声明与操作
数据隐藏与封装举例
class Date{
private int day, month, year;
void setDate( int a, int b, int c){
day = a;
month = b;
year = c ;
}
}
…
Date d1;
d1=new Date( ); d1.setDate(30,9,2001);
4
第4章 Java面向对象特性
对象生命周期
创建对象 使用对象 清除不用的对象
5
第4章 Java面向对象特性
创建对象
创建对象的三个步骤: 声明 (Declaration ) 实例化(Instantiation) 初始化(Initialization)
例: Point origin_one ; origin_one = new Point(23, 94); Rectangle rect_one = new Rectangle(origin_one, 100, 200); Rectangle rect_two = new Rectangle(50, 100);
public void changeObjValue( PassTest ref){
ref.ptValue = 99.0f; }
Java语言程序设计(第3版)(2018年清华大学出版社出版

作者简介
沈泽刚,1964年生,男,汉族,渤海大学信息科学与技术学院副教授、硕士生导师,研究方向为计算机应用 技术。
谢谢观看
2018年4月1ห้องสมุดไป่ตู้,该教材由清华大学出版社出版。
内容简介
全书共18章,主要内容如下:
第1章介绍Java语言的起源和发展、Java开发环境的构建、简单Java程序的开发和运行、程序设计风格与文 档以及集成开发环境Eclipse的使用。
第2章介绍数据类型、常用运算符、表达式以及数据类型的转换等。
第3章介绍程序的流程控制结构,包括选择结构和循环结构。重点介绍if结构、switch结构、while循环、 do-while循环以及for循环结构。
Java语言程序设计(第3版)(2018 年清华大学出版社出版
2018年清华大学出版社出版的图书
01 成书过程
03 教材目录 05 教材特色
目录
02 内容简介 04 教学资源 06 作者简介
《Java语言程序设计(第3版)》是由沈泽刚主编,2018年清华大学出版社出版的21世纪高等学校计算机类 课程创新规划教材。该教材可作为高等院校计算机专业或相关专业的“Java程序设计”或“面向对象程序设计” 课程的教材,也可作为Java认证考试及编程爱好者的参考资料。
第7章介绍类的继承与多态,其中包括继承性、封装性、多态性以及对象转换等。
第8章介绍Java常用核心类,包括Object类、Math类、基本数据类型包装类等,另外介绍了Java8新增的日 期-时间API相关的类。
教材目录
(注:目录排版顺序为从左列至右列 )
教学资源
该教材有配套教材——《Java语言程序设计(第3版)学习指导与习题解析》,书中提供了学习指导、实训 任务及编程练习的参考答案。
《Java程序设计实用教程(第4版)习题解答与实验指导》第1~8章

一个程序的编写和运行,写出实验报告。实验报告内容包括:题目、题意解释、题意分析、
设计方案、流程描述、源程序清单、程序运行结果、程序存在问题和改进意见等。
-2-
第1章 Java 概述
本章教学内容及要求如下: ① 了解 Java 语言特点,理解 Java Application 应用程序的运行原理和方法,理解由 Java 虚拟机支持的程序运行机制。 ② 掌握在 JDK 环境中编译和运行程序的操作,熟悉在 MyEclipse 集成开发环境中编辑、 编译、运行和调试程序的操作。 重点:掌握在 JDK 和 MyEclipse 环境中编译和运行 Java Application 应用程序的操作。
2-3 Java 语言的运算分哪些类型?与 C++语言相比,运算符及运算含义有哪些变化?
【答】Java 语言有算术运算、关系运算、位运算、逻辑运算、赋值运算、强制类型转换、
条件运算、括号运算、点运算、new、+字符串连接运算和 instanceof 运算等,其中+字符串连
接和 instanceof 运算符是 Java 新增的,此外,放弃了 C++的 sizeof 运算符。
2-2 与 C++语言相比,Java 语言的变量和常量声明有什么差别? 【答】Java 语言没有全局变量,(成员)局部变量含义及变量声明格式与 C++相同。 Java 语言没有宏替换,使用最终变量概念代替 C++中的常量和宏替换。使用 final 关键字 声明最终变量,只能赋值一次,这样既增加了常量功能,又避免全局变量和宏替换的副作用。
实验和课程设计等都是加强程序设计训练所必需的实践环节。
课程实验要求是,熟练使用一种 Java 开发环境(如 MyEclipse),掌握编译、运行和调试
Java2实用教程习题答案__第三版__耿祥义_清华大学出版社

Java2实用教程(第三版)课后习题参考答案第1章 Java入门1. 开发与运行Java程序需要经过哪些主要步骤和过程?答:(1)编写Java源文件:使用文本编辑器(Edit或记事本),拓展名为.java(2)编译Java源文件:使用Java编译器(javac.exe)。
得到字节码文件*.class(3)运行Java程序:Java应用程序使用Java解释器(java.exe)执行字节码文件;Java小应用程序使用支持Java标准的浏览器来执行。
2. 怎样区分应用程序和小应用程序?应用程序的主类或小应用程序的主类必须用public修饰吗?答:①应用程序必须有main方法,这个方法是程序执行的入口。
小应用程序没有main方法。
②应用程序的主类不一定用public修饰;小应用程序的主类必须用public修饰。
3. Java程序是由什么组成的?一个程序中必须要有public类吗?Java源文件的命名规则是怎样的?答:①Java程序由类组成。
②应用程序可以没有public类;小应用程序一定有一个类是public类(主类)。
③应用程序:如果只有一个类,源文件名与该类的类名相同,拓展名为.java;有多个类时,如果有public类(最多一个),源文件名与public类的类名相同,拓展名是.java;没有public类,源文件名与任何一个类的类名相同即可,拓展名为.java。
小应用程序:源文件名与主类的类名相同,拓展名是.java。
4. 在运行小程序的HTML文件中可以使用codebase属性指定小程序的字节码所驻留的目录。
如果不使用codebase属性,小程序的字节码文件必须和运行它的HTML文件在同一目录中。
编写一个小程序并将小程序的字节码存放在某个目录中,比如C:\5000;把运行该小程序的HTML文件(注意其中的codebase属性): <applet code=你的小程序的字节码 width=200 height=300 codebase=C:\5000></applet>存放在另一个目录中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
30
max 方法
public class Max { // Return the maximum between two objects public static Comparable max (Comparable o1, Comparable o2) { if (pareTo(o2) > 0) return o1; else return o2; }
33
接口和抽象类(续)
Interface1_2 Interface2_2
Interface1_1
Interface1
Interface2_1
Object
Class1
Class2
interface Interface1 extends Interface1_1, Interface1_2 {}
class Class1 implements interface2_1,interface2_2
Java程序设计
第4章 类的继承和接口
夏海轮 xiahailun@
北京邮电大学 信息与通信工程学院
本章内容
类的继承 抽象类 类的多态性
接口
内部类 程序开发过程和类的设计原则
移动生活俱乐部(中国)
类的继承性
类的继承性 super关键字 方法覆盖(overriding) Object 类 修饰符protected,final和abstract 多态性和对象转换 接口 内部类 程序开发过程和类的设计原则
class C4 C1 c1; c1.x cannot be read nor modified
13
思考
子类在声明超类的public或者protected方法时, 如果使用了不同的参数列表,调用的时候会出现 什么情况?
14
final 修饰符
带有final 修饰符的类不能被继承 final class Math {...}
25
示例:转换对象
示例:创建两个几何几何,一个圆和一个圆 柱,调用displayGeometricObject方法来 显示对象。判断如果对象是一个圆,则调用 displayGeometricObject方法显示面积和 周长,若对象是圆柱,该方法显示表面积和 体积
26
本章内容
类的继承 抽象类 类的多态性
}
31
示例:使用接口
这个例子中运用 max 方法,在两个圆中找出最 大的圆,在两个圆柱中找出最大的圆柱
接口名和方法名用 斜体书写 虚线和虚线空三角 用来指向接口 GeometricObject Circle Cylinder
parable
ComparableCircle
34
Cloneable 接口
标记接口
标记接口不包含常量或方法,但它对Java系统 有特殊的意义。Java系统要求 类实现 Cloneable 接口,可复制类的对象
public interface Cloneable {
}
示例讲解
35
问题思考
不实现Cloneable接口会出现什么问题? 为什么要重写clone方法? 为什么调用super.clone()?
22
对象转换
子类的实例转换为它的父类的实例是可能的。这 是因为,明确的显示转换可以省略
– 例如:
Circle myCircle = myCylinder
– 等价于 Circle myCircle = (Circle)myCylinder;
23
父类转换子类
在父类向子类的转换时可能会用到明确的显示转 换。但是这种转换并不总是成功的
18
抽象类的应用
Circle GeometricObject
Circle Object GeometricObject
-color -weight +getColor +setColor +getWeight +setWeight +findArea +findPerimeter - radius +getRadius +setRadius
Cylinder
Cylinder
-length +getLength +setLength +findVolume
Rectangle
-width -length +getWidth +setWidth +getLength +setLength
Rectangle
在UML中,抽象类 名和抽象方法名用 斜题书写
Java类中每个类都直接或间接继承自Object类
每个Java类中都拥有Object类的方法
– toString()方法将返回代表这个对象值的一个字符 串 – equals()方法比较两个对象的内容是否相等
– clone()方法复制对象
– ……
11
protected 修饰符
protected修饰符可用于类的属性和方法
在一个普通的类中,clone()方法是不可以被外部类调用的, 因为在Object类中,clone()方法是一个protected类型的方法, 如果要在自己的类中提供clone()方法给外部调用,就必须重 写clone()方法,并将其访问限制修改为public,这样在外部 类中才可以调用该方法。但是修改为public后,在外部调用该 方法时会报一个CloneNotSupportedException的异常,除了重 写该方法外,新的类还需要实现Cloneable接口。
继承
子类
Cylinder
Circle Methods Cylinder Methods
Circle Data Cylinder Data
超类
子类
UML图示
Circle -radius
+getRadius +setRadius +findArea
Cylinder
-length +getLength +setLength +findVolume
ComparableCylinder
compareTo
32
接口和抽象类
接口中的数据必须是常量,抽象类可以有各种类 型的数据
接口中的每个方法,只有一个头标志,没有实现 部分;抽象类可以有具体的方法,每个抽象类必 须至少包含一个抽象方法或继承另一个抽象方法 由于在接口中定义的每个方法都是抽象方法,接 口中的方法不需要用abstract修饰;但是在抽象 类中抽象方法必须用abstract修饰
12
protected 修饰符(续)
package p1 class C1 protected int x package p2 class C2 extends C1 x can be read or modified in C2
class C3 C1 c1; c1.x can be read or modified
接口
内部类 程序开发过程和类的设计原则
移动生活俱乐部(中国)
接口(interface)
什么是接口?
–接口是一种与类相似的结构 –如果一个抽象类中所有的方法都是抽象的,我们可以 将这个类用另外一种方式来定义,也就是接口的定义 –接口只包含常量和抽象方法 –接口是一种特殊的抽象类,这种抽象类中只包含常量 和方法的定义,而没有变量和方法的实现 –一个接口可以继承自其它接口(可以多继承) –所有的类有一个共同的根--Object类,但接多态性
接口
内部类 程序开发过程和类的设计原则
移动生活俱乐部(中国)
多态性和动态绑定
多态性(polymorphism)即“多种形式”
–多态性是实现软件可重用性的手段之一。它使得继承 特性更为灵活,并使程序具有良好的可扩展性
静态多态性
–静态多态性在编译时就可以被系统识别,是指同名方 法在功能上的重载
5
继承
超类的private成员是不能被继承的 子类的方法不能访问超类的private成员 如果子类可以访问其超类的private成员,那么 该子类的所派生的类也可以访问这些数据,这样 扩展了本应是private数据的访问,同时将失去 信息隐藏的优点。
6
创建子类
从超类扩展属性和方法来创建子类,你可以:
17
abstract 修饰符
抽象方法必须用abstract来修饰;抽象类也必须 用abstract关键字来修饰 抽象方法
–只有方法的声明,不需要实现(没有方法体) –含有抽象方法的类必须被声明为抽象类
抽象类
–抽象类不能被实例化,即不能用new关键字去产生一 个类的对象 –抽象类的子类如果是一个非抽象类,那么该子类必须 覆盖父类中所有的抽象方法,否则这个子类还是抽象 类
8
关键字 super (续)
子类继承父类成员变量和成员方法,但不继承父 类的构造方法
– 在子类的构造方法中可以使用语句super(参数列表) 调用父类的构造方法
如果子类的构造方法中没有显式地调用超类的构 造方法,也没有使用this关键字调用重载的其它 构造方法,则在产生子类的实例对象时,系统默 认调用超类的无参构造方法 构造函数式是不能被继承的 任何子类构造函数的第一个任务就是隐式或者显 式调用直接超类的构造方法。
增加新的属性 增加新的方法 对超类中的属性和方法进行覆盖
示例:创建一个 Cylinder 类, 并且研究 Cylinder类 和 Circle 类之间的关系
7
关键字 super
关键字super是在引用超类中的子类中出现的
super关键字可以用于两种用途
– 调用超类的方法 – 调用超类的构造方法
9
方法覆盖(overriding)
方法覆盖:在子类中定义的一个方法,其名称、 返回类型及参数签名正好与父类中某 个方法的 名称、返回类型及参数签名相匹配 覆盖方法时不能使用比超类中被覆盖方法更严格 的访问权限