Java程序设计 第9章 继承和多态.

Slides:



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

第五章 类的继承和派生 Inheritance/extends/derive. 教学目标 理解继承的概念和作用 派生类的定义 理解访问修饰符 protected 方法的重写 继承下的构造函数的使用 继承下的 finalize 方法的使用 理解超类和子类的关系.
面向对象程序设计 、. 第二章 面向对象的分析与设计 学习目标 1 确定系统中的对象 2 确定对象的属性及操作 3 测试对象的有效性 4 区分对象和类 5 了解面向对象的编程和过程化编程之间的区别 6 了解封装的主要好处 7 了解软件开发的主要步骤.
系統分析與設計 楊子青 H-1 H 、物件導向技術 n 物件導向的基本概念 – 物件、類別 – 封裝、繼承 – 同名異式 ( 多型 ) 、超荷 ( 過載 ) n 物件導向分析與設計及塑模工具 n UML 塑模工具.
第三讲 Java与面向对象技术 1、面向对象的概念 2、Java中的类、方法和变量 3、Java名字空间及访问规则
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第 9 章 物件的建構.
项目6 通用堆栈.
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
第一章 面向对象程序设计.
第二章 JAVA语言基础.
類別與物件 Class & Object.
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 包.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
Ch08 巢狀類別 物件導向程式設計(II).
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
H、物件導向技術 物件導向的基本概念 物件、類別 封裝、繼承 同名異式(多型) 、超荷(過載) 物件導向分析與設計及塑模工具 UML塑模工具.
第四章 在 C# 中实现 OOP 概念.
Java基础 JavaSE异常.
Classes Lecturer: 曾學文.
CHAPTER 9 建構方法 ROBERT.
第六章 类的扩展与继承.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
Java 程式設計 講師:FrankLin.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
软件建模精要 面向对象软件建模技术.
Java软件设计基础 5. 继承与多态.
面向对象程序设计 、.
辅导课程十三.
類別的繼承 Vehicle Car.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
Php class 組員: 賴羿陵 林昱廷 莊正暉 張雅晴
Java程序设计 第2章 基本数据类型及操作.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
第16章 虛擬與多形 16-1 虛擬函數 16-2 純虛擬函數與抽象類別 16-3 多形 16-4 虛擬繼承與虛擬解構子.
第7章 繼承/多型/介面 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
辅导课程八.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java语法基础.
Review 1~3.
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
辅导课程十二.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
第二章 Java基础语法 北京传智播客教育
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

Java程序设计 第9章 继承和多态

学习目标 理解类继承的概念以及父类和子类的关系 理解super关键字 掌握方法覆盖 理解多态性、动态绑定和对象的强制类型转换 理解数据字段和静态方法的隐藏 掌握修饰符:protected、final 了解ArrayList类

Employee和Manager public class Employee { public String name; public double salary; public Date birthDate; public String getDetails() {...} } public class Manager { public String name; public double salary; public Date birthDate; public String department; public String getDetails() {...} }

继承 public class Employee { public String name; public double salary; public Date birthDate; public String getDetails() {...} } Employee + name salary birthDate : String : double : Date getDetails () Manager department public class Manager extends Employee { public String department; }

父类和子类 语法 如果class C1 extends C2,则称C1为子类(subclass),C2为父类(superclass)。 class ClassName extends Superclass { class body } 如果class C1 extends C2,则称C1为子类(subclass),C2为父类(superclass)。 子类继承了父类中可访问的数据和方法,子类也可添加新的数据和方法, 子类不继承父类的构造函数。 一个类只能有一个直接父类。 继承 Manager Employee Employee的数据 Employee的方法 Manager的数据 Manager的方法

例 几何对象类 编写程序,父类GeometricObject,两个子类Circle和Rectangle。 Example:v1/Circle.java, v1/Rectangle.java, v1/TestCircleRectangle.java

super关键字 调用父类的构造函数 调用父类的成员 super(parametersopt)调用父类的的构造函数。 必须是子类构造函数的第一条语句。 如果子类中没有显式地调用父类的构造函数,那么将自动调用父类不带参数的构造函数。 父类的构造函数在子类构造函数之前执行。 调用父类的成员 super.data super.method(parameters) Example: ConstructorDemo.java

方法覆盖 如果子类重新定义了从父类中继承的实例方法,称为方法覆盖(method override)。 仅当方法是可访问的实例方法时,才能被覆盖,即私有方法不能被覆盖。 静态方法不能被覆盖,如果静态方法在子类中重新定义,那么父类方法将被隐藏。 一旦父类中的方法被覆盖,则不能从子类外部访问被覆盖的方法。在子类中可以使用super引用被覆盖的方法。 Example:v2/Circle.java, v2/Rectangle.java, v2/TestCircleRectangle.java OverrideTest.java

覆盖与重载 public class Test { public static void main(String[] args) { A a = new A(); a.p(10); } class B { public void p(int i) { class A extends B { System.out.println(i); public class Test { public static void main(String[] args) { A a = new A(); a.p(10); } class B { public void p(int i) { class A extends B { public void p(double i) { System.out.println(i);

Object类 java.lang.Object类是所有类的父类。如果一个类在声明时没有指定父类,那么这个类的父类是Object类。 equals方法:用于测试两个对象是否相等。Object类的默认实现是比较两个对象是否引用同一个对象。 toString方法:返回代表这个对象的字符串。Object类的默认实现是返回由类名、@和hashCode组成。

多态性、动态绑定 当调用实例方法时,由Java虚拟机动态地决定所调用的方法,称为动态绑定(dynamic binding) 或为多态(polymorphism)。 假定对象o是类C1的实例,C1是C2的子类,C2是C3的子类,…,Cn-1是Cn的子类。也就是说,Cn是最一般的类,C1是最特殊的类。在Java中,Cn是Object类。如果调用o的方法p,Java虚拟机按照C1、C2、…、Cn的顺序依次查找方法p的实现。一旦找到一个实现,将停止查找,并执行找到的第一个实现。 Cn Cn-1 … C2 C1 Object 查找方法p的顺序 对象o

通用编程 父类变量可以引用子类对象,针对父类对象设计的任何代码都可以应用于子类对象。 多态性允许方法使用更通用的类作为参数类型。 如果方法参数是父类,那么这个参数可以接受任何子类对象作为实参。当调用这对象的方法时,将动态绑定方法的实现。 Example:poly/PolymorphismDemo.java

类型转换 类型转换(type casting)可以将一个对象的类型转换成继承结构中的另一种类型。 从子类到父类的转换是合法的,称为隐式转换。 m(new Student());  Object o = new Student(); m(o); 从父类到子类必须显式转换,被转换的变量所指向的对象的类型必须是转换类或它的子类。 Student s = (Student)o; o所指向的对象必须是Student或Student子类的对象

instanceof操作符 可以用instanceof操作符判断一个对象是否是一个类的实例。表达式返回boolean值。 语法 referenceVariable instanceof TypeName

例 强制类型转换 编写程序,创建两个几何对象:圆和矩形。调用displayObject来显示结果。 如果对象是圆,显示半径和面积 如果对象是矩形,显示面积 Example:v2/TestPolymorphismCasting.java

隐藏数据字段和静态方法 如果子类中声明的数据字段和静态方法与父类中的名称相同,那么父类中的将被隐藏(hide)。 成员访问 通过super关键字访问被隐藏的数据字段和静态方法。 通过父类型的变量访问被隐藏的数据字段和静态方法。 成员访问 实例方法根据变量所引用的对象的实际类型进行访问。 数据字段和静态方法根据变量的声明类型进行访问。 A x = new B(); Example:HideDemo.java

protected修饰符 protected修饰符用于修饰数据和方法,可以被同一个包中的任何类或不同包中的子类访问。 P1 P2 C1 C4 public int x protected int y int z private int u C5 C1 c1 = new C1() C2 C2中的代码可以访问x,y,z C3中的代码可以访问c1对象中的x,y,z C4中的代码可以访问x,y C5中的代码可以访问c1对象中的x C3 C1 c1 = new C1()

访问控制符 类成员的访问控制符 类的访问控制符 public:类可以被任何包中的类访问 无(package):只有同一个包中的类可以访问 √ 成员修饰符 同一个类 相同包中的类 子类 不同包中的类 public √ protected 无(package) private

final修饰符 final数据:常量,数据初始化后不能再修改。 final方法:最终方法,子类不能覆盖。 String, StringBuffer final局部变量:数据初始化后不能再修改。

ArrayList java.util.ArrayList类表示一个内部以数组存储的线性表。 Example:TestArrayList.java, TestArrayListGeneric.java