程式設計(二) 進階類別 郭文真 Sabrina Kuo.

Slides:



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

第3-2章 类与 对象 Java类的特性 教学内容: 类的私有成员与公共成员 方法的重载 构造方法 实例成员与静态成员 重点: 重载 难点:
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第一單元 建立java 程式.
项目6 通用堆栈.
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
Ch03 物件導向程式設計_物件與類別 JAVA 程式設計入門(II).
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法
Ch07 介面與多重繼承 物件導向程式設計(II).
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 實例
方法與類別 in Java.
Ch03 類別與物件 物件導向系統分析與設計.
JAVA 程式設計與資料結構 第七章 繼承與Interface.
Java基础 JavaSE异常.
Classes Lecturer: 曾學文.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
Ch02 類別、物件及屬性 物件導向程式設計(II).
Ch10 類別與物件-方法 Java程式設計(2).
程式設計實作.
類別(class) 類別class與物件object.
Java程序设计 第9章 继承和多态.
類別的繼承 Vehicle Car.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
第5讲 使用类和对象编程(三) 内部类 实例 程序控制结构 选择语句.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
第一單元 建立java 程式.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
第16章 虛擬與多形 16-1 虛擬函數 16-2 純虛擬函數與抽象類別 16-3 多形 16-4 虛擬繼承與虛擬解構子.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第 19 章 XML記憶體執行模式.
|07 函數.
精彩Java 2程式設計 <吳逸賢、吳目誠 編著>
Ch09 物件導向技術導論(二) Java程式設計(2).
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
樣版.
Interfaces and Packages
OOP9 類別Class.
函數應用(二)與自定函數.
陣列與結構.
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
JAVA 程式設計與資料結構 第三章 物件的設計.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
開發Java程式語言的工具 JDK.
判斷(選擇性敘述) if if else else if 條件運算子.
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
方法(Method) 函數.
InputStreamReader Console Scanner
Presentation transcript:

程式設計(二) 進階類別 郭文真 Sabrina Kuo

outline 封裝 建構子 靜態區塊 內部類別

封裝 封裝的特點 隱藏類別實作的細節 強迫使用者透過方法操作屬性,如此可以保護資料不會被濫用 使程式碼更容易被維護

沒有封裝的物件 完整封裝的物件

存取修飾子 public:全域範圍,任何類別皆可存取 private:只同一類別存取,不可在子類別存取 protected:同一類別,子類別或同一套件存取與不同套件的子類別 沒有使用修飾子:同一類別和套件中,不包含不同套件的子類別 存取修飾子 類別 成員變數 成員方法 建構子 public 可 private 可(巢狀) protected abstract 否 Final

封裝的使用 class CCircle // 定義類別CCircle { private double pi=3.14; private double radius; public void setCCircle(double r) // setCCircle() 方法 radius=r; } public void show() System.out.println("radius="+radius+", area="+pi*radius*radius); public class app9_1 public static void main(String args[]) CCircle cir1=new Ccircle(); // 建立物件並呼叫CCircle()建構元 cir1.setCCircle(4.0); cir1.show(); 封裝的使用

建構元 定義 幫助新建立的物件設定初值 建立物件時,便自動執行建構元的內容 多用於對物件的資料成員做初始化設定

建構元的使用 class CCircle // 定義類別CCircle { private double pi=3.14; private double radius; public CCircle(double r) // 定義建構元CCircle() radius=r; } public void show() System.out.println("radius="+radius+", area="+pi*radius*radius); public class app9_1 public static void main(String args[]) CCircle cir1=new Ccircle(4.0); // 建立物件並呼叫CCircle()建構元 cir1.show(); 建構元的使用 2 3 1

計算矩形 // app8_3, method的建立 class CRectangle { //類別 比較 int width; int height; int area() // 定義函數成員area(), 用來計算面積 { return width*height; // 傳回矩形的面積 } int perimeter() // 定義函數成員perimeter(), 用來計算周長 { return 2*(width+height); // 傳回矩形的周長 } } public class app8_3{ //公用類別 public static void main(String args[]) { CRectangle rect1; rect1=new CRectangle(); // 建立新的物件 rect1.width=10; // 設定矩形rect1的寬 rect1.height=5; // 設定矩形rect1的高 System.out.println("area="+rect1.area()); System.out.println("perimeter="+rect1.perimeter()); }} 比較 計算矩形

建構子 使用new及建構子建立物件 預設建構子 物件名稱 = new 類別名稱(); 沒有定義建構子的類別時,編譯器會自動設給一個沒有形式參數的建構子 預設的建構子是沒有內容的,不會對物件的屬性有任何影影響 定義類別時,若有定義任何建構子,則編譯器不會設給預設建構子 物件名稱 = new 類別名稱();

建構子的呼叫 建立物件時呼叫建構子 方法可以和建構子同名。有回傳型別者為方法;反之,無回傳型別者為建構子 類別名稱 物件名稱 = new 類別名稱(形式參數列);

注意 建構子的名稱一律同類別名稱 不宣告回傳資料型別 建構子的修飾字可以為public、protected、private或無修飾字。 建構子修飾字不使用static和abstract 修飾字 類別名稱(形式參數列) { //程式敘述 }

定義建構子 建構子也可以多載 class SomeClass { public SomeClass() //不使用參數建立物件 } public SomeClass(int x, int y) //使用參數建立物件

建構元多載 System.out.println("constructor CCircle() called"); radius=1.0; class CCircle // 定義類別CCircle { private String color; private double pi=3.14; private double radius; public CCircle() // 沒有引數的建構元 System.out.println("constructor CCircle() called"); radius=1.0; color="Green"; } public CCircle(String str, double r) // 有兩個引數的建構元 System.out.println("constructor CCircle(String,double) called"); color=str; radius=r; public void show() System.out.println("color="+color+", Radius="+radius); System.out.println("area="+pi*radius*radius); public class app9_2 { public static void main(String args[]) CCircle cir1=new CCircle(); // 呼叫沒有引數的建構元 cir1.show(); CCircle cir2=new CCircle("Blue",4.0); // 呼叫有引數的建構元 cir2.show(); } 建構元多載

使用this() 建構子多載時,建構子呼叫其它建構子的限制: 必須使用 this() 取代類別名稱() 只能在第一個敘述呼叫 不能造成建構子遞迴

從某一建構元呼叫另一建構元 class CCircle // 定義類別CCircle { private String color; private double pi=3.14; private double radius; public CCircle() // 沒有引數的建構元 this("Green",1.0); // 此行會呼叫第13行的建構元 System.out.println("constructor CCircle() called"); } public CCircle(String str, double r) // 有引數的建構元 System.out.println("constructor CCircle(String,double) called"); color=str; radius=r; public void show() System.out.println("color="+color+", Radius="+radius); System.out.println("area="+pi*radius*radius); }  } public class app9_3 { public static void main(String args[]) CCircle cir1=new CCircle(); cir1.show(); }  } 從某一建構元呼叫另一建構元

類別變數的使用 class CCircle // 定義類別CCircle { private static int num=0; // 宣告num為類別變數 private static double pi=3.14; // 宣告pi為類別變數 private double radius; public CCircle() // 沒有引數的CCircle()建構元 this(1.0); // 呼叫第12行的建構元,並傳入1.0 } public CCircle(double r) // 一個引數的建構元 radius=r; num++; // 建構元被呼叫時,num便加1 public void show() System.out.println("area="+pi*radius*radius); public static void count() // count(),用來顯示目前物件建立的個數 System.out.println(num+" object(s) created"); public class app9_7 { public static void main(String args[]) CCircle.count(); // 用CCircle類別呼叫count() method CCircle cir1=new CCircle(); // 呼叫第8行的建構元 CCircle cir2=new CCircle(2.0); // 呼叫第12行的建構元 CCircle cir3=new CCircle(4.3); // 呼叫第12行的建構元 cir3.count(); // 用cir3物件呼叫count() method } 類別變數的使用

類別函數的限制 無法存取實例變數與實例函數 不能使用this public static void count() { System.out.println( num+”object(s) created”); System.out.println(“radius=”+radius); //不能存取 } 不能使用this System.out.println( this.num+”object(s) created”); System.out.println(“radius=”+radius);

靜態區塊 類別定義中,以static為首的區塊即為靜態區塊 靜態區塊的特點: 和其它靜態成員一樣皆為類別所有 區塊內的敘述可以和類別方法一樣,使用方法呼叫及運算 當類別被JVM載入後,會先執行靜態區塊內的敘述,而且只執行一次

內部類別 位於另一個類別之內的類別稱之為內部類別(inner classes),或稱為巢狀類別(nested classes) 靜態內部類別 使用static修飾字宣告的內部類別,稱為靜態內部類別(static inner classes) 靜態內部類別和類別內其它靜態成員一樣,都屬類別所有,所以類別方法可以直接使用靜態內部類別建立物件 若某個類別欲使用另一個類別的靜態內部類別時,必須以點運算子(dot operator)指明靜態內部類別所屬的類別,才可使用

內部類別 public class app9_15 { public static void main(String args[]) Caaa aa= new Caaa(); aa.set_num(5); } static class Caaa int num; void set_num(int n) num=n; System.out.println("num= "+ num); 內部類別

匿名內部類別 frm.addWindowListener ( new WindowAdapter() { public void wondowClosing(windowEvent e) System.exit(0); } ); 匿名內部類別

匿名內部類別 public class app9_17 { public static void main(String args[]) ( new Caaa() // 建立匿名內部類別Caaa的物件 void set_num(int n) num=n; System.out.println("num= "+ num); } ).set_num(5); // 執行匿名內部類別裡所定義的method static class Caaa //內部類別Caaa int num; 匿名內部類別

練習 課本9-42 1 2 3 4 9 11 12 13 14 17