第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)

Slides:



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

第五章 类的继承和派生 Inheritance/extends/derive. 教学目标 理解继承的概念和作用 派生类的定义 理解访问修饰符 protected 方法的重写 继承下的构造函数的使用 继承下的 finalize 方法的使用 理解超类和子类的关系.
面向对象程序设计 、. 第二章 面向对象的分析与设计 学习目标 1 确定系统中的对象 2 确定对象的属性及操作 3 测试对象的有效性 4 区分对象和类 5 了解面向对象的编程和过程化编程之间的区别 6 了解封装的主要好处 7 了解软件开发的主要步骤.
系統分析與設計 楊子青 H-1 H 、物件導向技術 n 物件導向的基本概念 – 物件、類別 – 封裝、繼承 – 同名異式 ( 多型 ) 、超荷 ( 過載 ) n 物件導向分析與設計及塑模工具 n UML 塑模工具.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目7 面向对象高级.
项目6 通用堆栈.
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
第一章 面向对象程序设计.
程設一.
C#程序设计 10软件1、2班 王槐彬 计算机工程学院.
第二章 JAVA语言基础.
類別與物件 Class & Object.
類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法
Ch07 介面與多重繼承 物件導向程式設計(II).
JAVA程序设计 (03) JAVA Programming
第5章 进一步讨论对象和类.
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
程設一.
Ch08 巢狀類別 物件導向程式設計(II).
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
H、物件導向技術 物件導向的基本概念 物件、類別 封裝、繼承 同名異式(多型) 、超荷(過載) 物件導向分析與設計及塑模工具 UML塑模工具.
Java基础 JavaSE异常.
Classes Lecturer: 曾學文.
CHAPTER 9 建構方法 ROBERT.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
第六章 类的扩展与继承.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
Java 程式設計 講師:FrankLin.
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
Java软件设计基础 5. 继承与多态.
面向对象程序设计 、.
Java程序设计 第9章 继承和多态.
Ch01 物件與類別複習 物件導向系統實務.
辅导课程十三.
類別的繼承 Vehicle Car.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
Php class 組員: 賴羿陵 林昱廷 莊正暉 張雅晴
C/C++/Java 哪些值不是头等程序对象
第六章 属性、索引器、委托和事件.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
第7章 繼承/多型/介面 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
C#程序设计基础 $3 成员、变量和常量.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java语法基础.
龍老師我不會Debug QQ.
辅导课程十一.
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
辅导课程十二.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
判斷(選擇性敘述) if if else else if 條件運算子.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class) 6-3 介面 (Interface)

6- 類別的繼承 (Class Inheritance) 繼承是軟體再利用的一種技術,它允許設計者利用現成的類別發展出另一個類別。

6-1 類別的繼承 (Class Inheritance) 6-1-2 父類別(parent class、Super class、Base class)與子類別(child class、Sub class、Derived class)

6-1 類別的繼承 (Class Inheritance) 個人”和”學生”定義出兩個獨立分開的類別 將”學生”類別定義為”個人”的特別類別。換句話說,將”學生”類別繼承”個人”類別。

6-1 類別的繼承 (Class Inheritance) 6-1-3 子類別的產生

6-1 類別的繼承 (Class Inheritance) 子類別的產生 【步驟一】先找父類別 【步驟二】列出父類別的屬性 【步驟三】列出子類別的屬性 Property - Room, City, ID +getData():String +getID():String Apartment -floor, balcony +assessValue():double +getData():String

6-1 類別的繼承 (Class Inheritance) 【步驟四】建立類別的繼承關係 public class Apartment extends Property { private double balcony; private int floor; public Apartment(String identifer, String location, int rooms, double balcony, int floor){ } public double assessValue() { public String getData() { // 重新定義(Override)父類別的getData()函數  

6-1 類別的繼承 (Class Inheritance) 6-1-4 繼承的實作 Implementation 設定存取識別 Access Modifier public class Apartment extends Property { private double balcony; private int floor; public Apartment(String identifer, String location, int rooms, double balcony, int floor){ } public double assessValue() { public String getData() { // 重新定義(Override)父類別的getData()函數

6-1 類別的繼承 (Class Inheritance) 在子類別中引用父類別的函數或變數 直接寫父類別的函數或變數名稱 public double assessValue(){ double value = Room * 50000 + balcony *100 + floor * 5000; return value; } 如果子類別內的變數名稱或函數簽樣(signature)與父類別內的相同,就不可以直接寫該函數或變數名稱 public String getData() { String result = super.getData(); // 取得父類別的資料 result += "\nbalcony: " + balcony + "\nfloor: " + floor; // 父類別的資料+本身的資料 return result;

6-1 類別的繼承 (Class Inheritance) 在子類別中引用父類別的建構函數 由於子類別標題已定義了父類別的名稱,所以在引用父類別的建構函數時,不必再標示建構函數名稱,使用super保留字即可。 如果在子類別的函數中自行定義的變數名稱與類別的本身的成員變數名稱同名,在本身的成員變數名稱前加上this保留字。 public Apartment(String identifer, String location, int rooms, double balcony, int floor) { super(identifer, location, rooms); // 引用父類別的建構函數 this.balcony = balcony; // 左邊是類別的變數,右邊是函數的參數 this.floor = floor; // 左邊是類別的變數,右邊是函數的參數 }

6-1 類別的繼承 (Class Inheritance) 在子類別中重新定義(Override)父類別的函數 維持函數標頭不變,只是函數內的指令重寫。如子類別中的getData()函數就是重新定義父類別的getData()函數 子類別的使用: 當子類別的物件產生後,可以引用子類別及父類別內定義為public的函數及變數。 public static void main(String[] args) { Apartment property1 = new Apartment("1234567", "Taipei", 6, 9, 5); property1.getID(); // 引用父類別的函數 System.out.println(property1.getData()); // 引用子類別的函數 System.out.println ("The assess value of this apartment is " + property1.assessValue()); // 引用子類別的函數 }    

6-1 類別的繼承 (Class Inheritance) 6-1-5 Object 類別 Object類別是Java程式中所有類別的父類別,只是這些類別並不需要特別聲明父類別是Object。也就是說宣告一個類別而沒有extends任何類別時,編譯器會為該類別補上extends Object。之前我們用了許多沒有經過實作的函數,就是Object類別內的函數。 Object類別的函數: clone() 是複製整個物件 MyClass obj2 = (MyClass) obj1.clone( ); equals() 是比較兩個物件是否相等 if (obj2.equals(obj1)) { }; toString() 是傳回一個代表該物件的字串 String rand = Double.toString(Math.random());

6-2抽象類別Abstract Method 上節談到的繼承是無條件的,被繼承者也可以設定有條件的繼承,也就是繼承者必須完成部份內容。 抽象函數是尚未定義(implement)的函數,也就是函數在宣告時使用abstract保留字,且不定義其內容,內容由繼承者完成。如: public abstract void methodA(); 通常以protected限制抽象函數必須被繼承 protected abstract void methodA();

6-2抽象類別Abstract Method 6-2-2 抽象類別 abstract class 一個類別裡若有抽象函數或父類別有抽象函數,該類別必須宣告成抽象類別,由於它的函數尚未定義完整,是不能用來生成物件instantiated。 對於一個沒有抽象函數的類別,如果想限制它不能生成物件,也可以設定為抽象類別,所以抽象函數不是抽象類別必要的條件。 抽象類別宣告也是使用abstract保留字。如:   public abstract class property { // 定義抽象類別 protected abstract double assessValue(); // 未定義的函數

6-2抽象類別Abstract Method 6-2-3 抽象類別的使用 抽象類別只能被擴充,並於擴充時完成抽象函數的定義或重寫其中的函數: 6-2-3 抽象類別的使用 抽象類別只能被擴充,並於擴充時完成抽象函數的定義或重寫其中的函數: public class Apartment extends Property{ : public double assessValue() // 完成抽象函數的定義 { double value = Room * 50000 + balcony *100 + floor * 5000; return value; }

6-3 介面 Interface 6-3-1 何謂介面(Interface)? 前節談到的是有條件的繼承,被繼承者只有部份函數未完成定義,現在談的是被繼承者所有的函數均未完成定義。 介面是一些相關函數的集合,所有這些函數只有標題沒有定義(implement),作用是規範子類別必須完成其中的內容。 public interface Insurable {     public int getPolicyNumber();     public int getCoverageAmount();     public double calculatePremium();     public Date getExpiryDate(); }

6-3 介面 Interface 6-3-2 介面的使用 public class Car implements Insurable {     public int getPolicyNumber() {        // 程式碼省略     }     public double calculatePremium() {        // 程式碼省略     }     public Date getExpiryDate() {        // 程式碼省略     }     public int getCoverageAmount() {        // 程式碼省略     } } 介面用來規範不同程式使用相同的函數名稱,如同樣是保費計算,不會發生有的叫calculatePremium(),有的叫CalculatePremium(),,有的叫PremiumCalculate ()。

6-3 介面 Interface 6-3-3 介面與抽象類別的差異 抽象類別內可能有一個或一個以上完全沒有實作(implement)的抽象函數。而介面裡面的函數則是全部沒有實作,雖然介面內的函數宣告不必加abstract關鍵字。 抽象類別用在部份已經成形的地方,如汽車已經有幾個固定的方法(如加油、煞車),但是還有幾個功能會因車子種類不同而不同(如引擎馬力、驅動方式)。 而介面則用在每種功能都會因類別不同而不同的地方。如偵測滑鼠動作係根據不同的事件(event)做反應,同一事件不同程式會有不同反應,所以將偵測滑鼠動作MouseListener設計成介面。 介面與抽象類別一樣不能被用來生成物件(instantiated) ,如 new Insurable(); 是不被許可的。

6-3 介面 Interface 6-3-4 介面與繼承的差異 1. 在繼承中,合用的可以完全留用,不合用的可以重寫(Override)。在介面中,就必須完全自力救濟了,因為它只提供一個空架子。 2. 子類別只能繼承一個父類別(C++可以繼承多個類別),但可以使用好幾個介面。 3. 繼承與介面可以同時使用,如: public class Vegetable extends Food  implements  EdibleObject, ThrowableObject, CookableObject{     : }  

6-3 介面 Interface 6-3-5 何謂多型 Polymorphism? 多型是抽象類別與介面的一種應用觀念,就像封裝Encapsulation是一般類別的應用觀念一樣,並不是新的架構或實體。 當許多類別引用同一個抽象類別或介面時,每個類別一定會對抽象類別或介面內未完成的函數予以實作,一般而言某一函數被各類別實作後,內容會各自有不同,這種相同函數名稱不同函數內容的用法就是多型Polymorphism的意思。