Ch07 介面與多重繼承 物件導向程式設計(II).

Slides:



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

Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
面向对象程序设计 、. 第二章 面向对象的分析与设计 学习目标 1 确定系统中的对象 2 确定对象的属性及操作 3 测试对象的有效性 4 区分对象和类 5 了解面向对象的编程和过程化编程之间的区别 6 了解封装的主要好处 7 了解软件开发的主要步骤.
多元評量與 Greenfoot 簡介 南港高中高慧君. 演講大綱 多元評量 高中階段程式設計教學目標與困境 Greenfoot 快速入門 – 袋熊吃樹葉 – 沙灘螃蟹 Greenfoot 臺灣社群介紹 2.
系統分析與設計 楊子青 H-1 H 、物件導向技術 n 物件導向的基本概念 – 物件、類別 – 封裝、繼承 – 同名異式 ( 多型 ) 、超荷 ( 過載 ) n 物件導向分析與設計及塑模工具 n UML 塑模工具.
单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第一單元 建立java 程式.
王 子 坊 《洛陽伽藍記》 主講教師:張其昀.
项目6 通用堆栈.
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
第一章 面向对象程序设计.
第二章 JAVA语言基础.
類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法
JAVA程序设计 (03) JAVA Programming
第三章 控制结构.
第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塑模工具.
Java基础 JavaSE异常.
Classes Lecturer: 曾學文.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
第六章 类的扩展与继承.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
Ch10 類別與物件-方法 Java程式設計(2).
程式設計實作.
CH09 套件 物件導向程式設計(II).
Java软件设计基础 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语言程序设计-类与对象 教师:段鹏飞.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
第一單元 建立java 程式.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
第16章 虛擬與多形 16-1 虛擬函數 16-2 純虛擬函數與抽象類別 16-3 多形 16-4 虛擬繼承與虛擬解構子.
辅导课程八.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Interfaces and Packages
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
龍老師我不會Debug QQ.
歷史上的今天 2006/12/12 大代誌 不怕死之高鐵試乘篇.
第二章 Java基本语法 讲师:复凡.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
辅导课程十二.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
判斷(選擇性敘述) if if else else if 條件運算子.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

Ch07 介面與多重繼承 物件導向程式設計(II)

單一繼承 vs 多重繼承(1/2) Java的繼承是屬於單一繼承,C++的繼承是屬於多重繼承 多重繼承是指:指一個類別能夠繼承多個父類別 在許多時候多重繼承的性質是相當有用。 在Java,多重繼承的性質交給介面。

單一繼承 vs 多重繼承(2/2) 多重繼承的性質很有用,現實環境中,處處是多重繼承,想想以下情境: 你有一隻手機,它有PDA和GPS的功能,有一天,ToTo跟你借GPS 如果1:你怕ToTo弄壞了,他的媽媽又不會賠,這時,你可以採用『單一繼承』的說法, “不好意思,我有行動電話” 如果2:你不怕ToTo弄壞,因為他弄壞了,你就可以順理成章的成為他的小童星經紀人,好好利用他大賺一筆;則,你可以採用『多重繼承』的說法, “我有一隻手機,它有GPS的功能,借給你”

動動小手時間(1) 請繪出上一頁的行動電話的繼承圖

介面(1/2) 介面中定義的方法就像是飲料販賣機上的按鈕

介面(2/2) 介面(Interface)是在類別繼承架構中定義類別行為,內含常數和方法宣告,但是並沒有實作程式碼

介面的定義與實作(1/3) 定義介面的語法: 介面定義的例子: 修飾字 interface 介面名稱 { //靜態常數定義 //抽象方法宣告 } 介面定義的例子: interface MyInterface int i=2;  //已預設使用 public、final、static void m(); //已預設使用 public、abstract

介面的定義與實作(2/3) 實作介面的類別定義語法: 修飾字 class 類別名稱 implements 介面名稱 { //包含實作方法的敘述 }

介面的定義與實作(3/3) 介面多重繼承的語法: 類別實作多個介面的語法: interface 子介面 extends 父介面一, 父介面二, ... { //新增的靜態常數及抽象方法 } 類別實作多個介面的語法: class 類別名稱 implements 介面一, 介面二, ... //類別主體敘述

範例1:宣告與使用介面(1/4) UML類別圖,如下圖所示:

範例1:宣告與使用介面(2/4) AreaInterface介面,如下所示: interface AreaInterface { final double PI = 3.1415926; void area(); }

範例1:宣告與使用介面(3/4) 接著Circle類別可以實作這個介面,如下所示: class Circle extends Shape implements AreaInterface { ……… public void area() { System.out.println("X座標: " + x); System.out.println("Y座標: " + y); System.out.println("圓半徑: " + r); System.out.println("圓面積: " + PI*r*r); }

範例1:宣告與使用介面(4/4) abstract class Shape0601 { public double x; public double y; } interface AreaInterface0601 { final double PI = 3.1415926; void area(); class Circle0601 extends Shape0601 implements AreaInterface0601 { public double r; public Circle0601(double x, double y, double r) { this.x = x; this.y = y; this.r = r; public void area() { System.out.println("X座標: " + x); System.out.println("Y座標: " + y); System.out.println("圓半徑: " + r); System.out.println("圓面積: " + PI*r*r); class Ch06_01 { public static void main(String [] args) { Circle0601 c = new Circle0601(5.0, 5.0, 8.0); c.area(); System.out.println("PI常數: " + AreaInterface0601.PI); System.out.println("PI常數(以物件方式): " + c.PI); }

介面也是物件的型別 當物件所屬之類別在定義時實作某個介面,則此物件也「屬於」該介面型別的物件。意即,介面也是物件的型別。 若某個物件,其所屬之類別沒有實作介面,卻定義了介面宣告的方法時,該物件還是不屬於介面型別。 介面是物件的型別,所以介面也可以為陣列的基底型別,而形成異質集合。

介面的多重繼承 介面和介面之間也可以有繼承的關係,而且可以有多重繼承的關係 不可以有靜態常數的重複繼承。如果不同父介面中定義了同名的常數,則子介面型別的物件不可以使用該常數,以免發生曖昧不明的狀況

範例2:介面的多重繼承(1/3) 實線為繼承(extends),虛線為實作介面(implements)

範例2:介面的多重繼承(2/3) 請先練習一下功力 Ch06_02.java

範例2:介面的多重繼承(3/3) class Ch06_02 { public static void main(String [] args) CCF a = new CCF(); a.m1(); a.m3(); a.m4(); a.m5(); } abstract class CCE String name = "CCE"; abstract void m1(); void m2() System.out.println("我在CCE的m2啦!"); interface IIA String name = "IIA"; void m3(); void m5(); interface IIB String name = "IIB"; interface IIC extends IIA, IIB String name = "IIC"; interface IID String name = "IID"; void m4(); class CCF extends CCE implements IIC, IID { String name = "CCF"; void m1() System.out.println("我在CCF的m1!"); m2(); } public void m3() System.out.println("我在CCF的m3!"); public void m4() System.out.println("我在CCF的m4!"); public void m5() System.out.println("我在CCF的m5!"); }請先練習一下功力

介面vs抽象類別(1/3) 介面和抽象類別的相似之處: 不能直接使用介面或抽象類別建立物件 介面與抽象類別都可以宣告抽象方法。

介面vs抽象類別(2/3) 介面(Interface)是在類別繼承架構中定義類別行為,內含常數和方法宣告,但是並沒有實作程式碼,它和抽象類別的差異,如下所示: 抽象類別的方法可能只有宣告,但是仍然可以擁有一般方法,介面的方法都只有宣告,而且一定沒有實作的程式碼。 介面不屬於類別的繼承架構,就算亳無關係的類別也一樣可以實作同一個介面。 類別只能繼承一個抽象類別,但是可以同時實作多個介面。

介面vs抽象類別(3/3) 介面和抽象類別的相異之處: 介面內的方法皆為 public 和 abstract 方法。抽象類別的抽象方法存取修飾字不限為 public。 介面內的屬性皆預設為public、static及final宣告,必須指定其值。抽象類別中的屬性則沒有限定 介面之間可以有多重繼承。抽象類別和其它類別之間只能有單一繼承 介面的目的是制訂整組訊息接收器的規格,模擬類別的多重繼承。抽象類別的目的則是制訂部份物件的規格,並制訂部份訊息接收器的規格,為多型做準備

大腦、小手動一動(2) 請設計兩種類別: 珍珠奶茶 奶茶珍珠 兩個物件分屬這兩類別