類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法

Slides:



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

第五章 类的继承和派生 Inheritance/extends/derive. 教学目标 理解继承的概念和作用 派生类的定义 理解访问修饰符 protected 方法的重写 继承下的构造函数的使用 继承下的 finalize 方法的使用 理解超类和子类的关系.
第3-2章 类与 对象 Java类的特性 教学内容: 类的私有成员与公共成员 方法的重载 构造方法 实例成员与静态成员 重点: 重载 难点:
单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第一單元 建立java 程式.
王 子 坊 《洛陽伽藍記》 主講教師:張其昀.
项目6 通用堆栈.
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
北京科技大学天津学院 信息工程系 面 向 对 象 程 序 设 计 第1讲 Java初探 主讲:于静.
第一章 面向对象程序设计.
第二章 JAVA语言基础.
第15章 繼承與多重繼承 15-1 繼承的基礎 15-2 覆寫與隱藏父類別的成員 15-3 子類別的建構與解構子 15-4 多重繼承
Ch07 介面與多重繼承 物件導向程式設計(II).
创意源自激情,技术成就梦想 畅翼创新俱乐部 2012年春俱乐部第三次技术培训 赵程.
JAVA程序设计 (03) JAVA Programming
1 Department of Computing.
第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 方法的使用和对象数组
Java基础 JavaSE异常.
Classes Lecturer: 曾學文.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
第六章 类的扩展与继承.
Java 程式設計 講師:FrankLin.
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
Ch10 類別與物件-方法 Java程式設計(2).
程式設計實作.
CH09 套件 物件導向程式設計(II).
JUDE教學 Jude安裝教學篇 Jude初步介紹篇 Jude繪圖介紹篇 介紹jude的安裝和下戴 介紹jude的初基本功能
第9章 類別圖與物件圖 9-1 類別圖與物件圖的基礎 9-2 類別圖的符號 9-3 類別關係 9-4 物件圖 9-5 繪製類別圖與物件圖
Java程序设计 第9章 继承和多态.
Ch01 物件與類別複習 物件導向系統實務.
類別的繼承 Vehicle Car.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
Java程序设计 第2章 基本数据类型及操作.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
第一單元 建立java 程式.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
第16章 虛擬與多形 16-1 虛擬函數 16-2 純虛擬函數與抽象類別 16-3 多形 16-4 虛擬繼承與虛擬解構子.
简单工厂模式.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
C#程序设计基础 $3 成员、变量和常量.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Interfaces and Packages
第二章 Java语法基础.
辅导课程十一.
第二章 Java基本语法 讲师:复凡.
第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
辅导课程十二.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法 繼承與多重繼承-類別架構 類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法

類別架構 類別的繼承關係可以建立類別架構 , 在U M L類別關係中 , 繼承是一般關係(Generalization) 例如:類別Car是繼承自類別Vehicle 上圖的Vehicle類別是Car的父類別 , 反之 , Car類別是Vehiclle類別的子類別 , 在U M L類別圖的繼承是使用空心箭頭線來表示兩個類别的一般關係

繼承不只可以多個子類別繼承同一個父類別 , 而且還可以擁有很多層的繼承 上圖的Truck , Car和Mororeycle類別是兄弟類別 , 當然我們可以繼續繼承類別Car , 類別SportsCar和Jeep也是類別Vehicle的子類別 , 不過並不是直接繼承子類別

類別的繼承 父類別Vehicle定義車輛基本資料: class Vehicle { private int engineNo: private string name; private double price; public void setNumber(int no){….} public void setName(String n){….} public void serPrice(double p){….} public void printVehicle(){….} }

宣告類別繼承自存在的類別 UML類別圖: 宣告語法 Class 子類別名稱 extends 父類別名稱 { 子類別可繼承父類別所有成員資料和方法但有一些限制 子類別不能存取父類別宣告成private的成員資料和方法 父類別的建構子不屬於類別的成員所以子類別並不能繼承父類別的建購子 宣告語法 Class 子類別名稱 extends 父類別名稱 { ……./ / 額外的成員資料與方法 } 以car子類別宣告為例: class Car exends Vehicle private int doors; public Car(String name,int no,double price,int doors){…} Public void printCar(){…} (範例:Ch9_1_2)

覆寫和隱藏父類別的方法 如果繼承父類別方法不符合需求,在子類別可以宣告同名,同參數列和傳回值的方法來取代父類別繼承的方法,稱為覆寫 不過物件的副本方法並不能取代宣告成static的類別方法來取帶它,稱為隠藏

在父類別Vehicle擁有1個類別方法和成員方法需要被隱藏和覆寫 Class Vehicle // 父類別 {….. Public static void printType(){….} ….. Public void printVehicle(){….} } Class Car extend Vehicle //子類別 Public static void printType(){…..} //宣告了與父類別同名 …… Public void printVehicle(){…}

在程式碼呼叫Car物件的副本和類別方法時,是呼叫子類別Car的方法,而不是父類別的方法 上述類別架構可以看出在父與子 類別圖擁有同名的類別和成員方法 (範例Ch9_1_3)

隱藏父類別的成員資料 (範例Ch9_1_4) 在子類別可以隱藏父類別成員資料的變數,只需變數的名稱相同,就算變數的資料型態不同也一樣可以隱藏 例如:父類別成員變數engineNo宣告成public的整數型態 class Vehicle //父類別 { public int engineNo; …………. } 子類別Car的成員變數engineNo是private的字串物件,而不再是整數int,原來public的engineNo成員變數被隱藏起來 class car extend Vehicle //子類別 { private String engineNo; ……….. } (範例Ch9_1_4)

使用父類別的建構子 因為子類別並不會繼承父類別的建構子,所以在子類別只能使用super關鍵字呼叫父類別的建構子,同理,在子類別覆寫的方法和隱藏的成員變數,也可以使用super來呼叫和存取 例如:使父類別擁有建構子 Class Vehicle { public static int count; public int engineNo; public String name; public Vehicle(int name, int no){…..} public void printVehicle() {….} }

class Car extendsVehicle 子類別Car的成員變數name和engineNo隱藏父類別的成員變數成為private { private String name; private int engineNo; private int doors; public Car(String name, int no,int doors) super(name, no); ………. } public void printVehicle() ……. super.printVehicle( ); …….. System.out.println(“名稱(父):”+super.name); System.out.println(“引擎號碼(父)” +super.engineNo) 子類別Car的成員變數name和engineNo隱藏父類別的成員變數成為private 在car類別的建構子使用super(name,no)呼叫父類別的建構子,super.name和super.engineNo取得父類別的成員變數 (範例Ch9_1_5)

Java的介面 Java語言並沒有像C++語言支援多重繼承, 不過Java語言提供[介面](interface),可以建立單一物件多型態和提供多重繼承的功能,本章主要說明介面的使用和繼承

介面的基礎 Java的介面(Interface)可以替類別的物件提供共同介面 , 就算類別間 沒有任何關係(有關係也可以) , 一樣可以擁有共同介面 如同網路通訊協定(Protocol)建立不同電腦網路系統間的管道 , 不管是windows或Unix作業系統的電腦 , 只要會說TCP/IP就可以建立連線也就是說介面是定義不同類別間的一致行為,也就是共同的方法 例如:Car和CD類別擁有同名方法getprice( )取得價格 , Java程式可以將共同方法抽出成為介面Iprice , 如果Book類別也需要取得書價 , 就可以直接實作Irrice介面就表示可以取得物件價格 , 這些類別都擁有相同的行為:取得價格

在U M L圖示的介面圖和類別圖相似,只是在類別名稱上方使用<<interface>>指名此為介面: 上圖介面是類別架構的一般關係(繼承) , 只是使用虛線連接Iprice介面和Car類別 , 在介面方法前並不需使用存取修飾子 在類別上方的<<和>>括起的文字稱為型態名別(Stereotype) , 這是一個標籤或符號 , 用來標示物件額外的型態名稱 , 以此例表示是介面資料型態

介面的建立與使用 Java語言的介面和類別一樣都屬於參考的資料型態 , 介面可以定義類別的行為 , 內含常數和方法的宣告 , 但是並沒有實作的程式碼 , 當類別實作介面時 , 類別需要實作“所有”的介面方法

介面宣告 Java語言的介面可以宣告常數和方法 , 方法屬於抽像方法(Abstract Method)表示只有宣告 , 沒有程式碼 語法: public interface 介面名稱 { final 資料型態 常數=值; …………. 傳回值型態 介面方法( 參數列 ); } 上面的介面宣告使用interface關鍵字 , 類似類別架構 , 只是宣告的內容只有常數和抽象方法(表示尚未實作) 例如:IArea介面 interface IArea { final double PI=3.1415 Void area( ); }

類別實作介面 範例: Circle類別實作IArea介面 class Circle implements IArea { ……. 類別可以實作介面 , 建立介面方法的程式碼 class 類別名稱 implements 介面名稱1,介面名稱2 { …….. // 實作的介面方法 } 上面的類別需要使用implements關建字實作介面 , 如果實作的介面不只一個要用 , 逗號分開 範例: Circle類別實作IArea介面 class Circle implements IArea { ……. public void area( ) System.out.println(“圓面積:”+PI*r*r); }

Circle 類別實作Iarea介面 , 也就是抽象方法area( ) U M L類別圖: 圖例的Circle類別擁有實作介面的area()方法 , 在介面中的常數是隱含宣告成static , 也就是說 , 如同類別變數一般 , 可以直接使用介面名稱取得其值 (範例Ch9_2_2)

在類別實作多個介面 宣告: interface IArea { final douvle PI=3.1415; void area( ); 在Java語言可以實作多個介面 例如:IArea和Ishow兩個介面 宣告: interface IArea { final douvle PI=3.1415; void area( ); } interface Ishow void show( ); 2個介面各擁有1個介面方法 , 在Circle類別可以同時實作IArea和Ishow兩個介面 宣告: class Circle implements IAres,Ishow { ……. public void area ( ) ….. } public void show( ) ……..

類別需要實作兩個介面的2個方法-area()和show() U M L類別圖: Circle類別擁有實作2個介面的area()和show()方法 (範例Ch9_2_3)

類別架構與介面 在類別架構中可以將各類別的共同方法抽出成為介面 , 然後讓各類別實作此介面 例如:Vehicle類別和Car子類别都擁有print()方法顯示類別的成員資料 , 我們可以將print()方法抽出來成為Iprint介面 U M L圖: 上圖介面是獨立在類別架構之外 , 類別架構的各類別不只可以實作IPrint介面 , 還可以實作其它介面 (範例Ch9_2_4)

介面的繼承 宣告新的介面繼承其它介面的所有常數和方法 例如:繼承IArea介面 interface IShape extends IArea 在Java語言的介面並不能隨便新增方法 , 因為實作介面的類別需要實作所有的介面方法 , 如果需要新增介面的抽象方法 , 可以使用介面繼承方式來擴充介面 語法: Interface 介面名稱 extends 繼承的介面 { …..//額外的常數和方法 } 宣告新的介面繼承其它介面的所有常數和方法 例如:繼承IArea介面 interface IShape extends IArea { Void perimeter(); }

介面IShape是繼承自IArea介面 , 新增perimeter()介面方法 U M L圖: 上圖實作Ishape介面的類別一共需要實作area()和perimeter()兩個方法 (範例Ch9_3)

介面的多重繼承-多重繼承的基礎 C++語言支援多重繼承 , 也就是父類別不只一個 , Java語言並不支援多重繼承但是支援介面的多重繼承 多重繼承是指一個類別能夠繼承多個父類别 上圖的Driven_truck類別是繼承來自2個類別Truck和Driver , 擁有兩個父類別稱為多重繼承

介面的多重繼承 語法: interface 介面的名稱 extends 繼承的介面1 , 繼承的介面2 { …..//額外的常數和方法 } 宣告的介面繼承多個介面 , 各介面要用 , 逗號分隔 範例:Ishape介面繼承自Iarea和Ishow介面 Interface Ishape extends IArea , IShow { Void perimeter( ); }

U M L圖:介面Ishape是繼承自IArea和Ishow介面 , 新增perimeter()方法 Ishape介面繼承自兩個父介面 , 實作Ishape介面一共需要實作area() , perimeter()和show()三個方法 (範例Ch9_4_2)

習題 9_10 U M L圖: 9_12 U M L圖: