




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第六章第六章 Overview6.1 類和對象概述類和對象概述6.2 類的封裝類的封裝6.1 類和對象概述類和對象概述面向對象的基本概念面向對象的基本概念n面向對象技術中,將客觀世界中的事物作為對象看待面向對象技術中,將客觀世界中的事物作為對象看待n每個事物都有自己的屬性和行為每個事物都有自己的屬性和行為 從程序設計的角度從程序設計的角度n事物的事物的屬性屬性可以用可以用變量變量描述描述n事物的事物的行為行為用用方法方法描述描述類類: 定義屬性和行為的模板定義屬性和行為的模板對象是類的實例對象是類的實例n對象與類的關系就像變量和數據類型的關系一樣對象與類的關系就像變量和數據類型的關系一樣 對象
2、與類簡單地說:簡單地說:對象對象是現實世界中某個具體的事物;是現實世界中某個具體的事物;類類是對象的抽象描述。是對象的抽象描述。 張三 類類(CLASS), 如:如: “Man class ”將對象抽象為類將對象抽象為類對類進行實例化對類進行實例化汽車類對象對象抽象為類類實例化為對象Java的類OOP認為:程序由對象組成認為:程序由對象組成每個對象有自己的每個對象有自己的屬性屬性和能執行的和能執行的操作操作并且:只關心對象能夠完成的操作,不必并且:只關心對象能夠完成的操作,不必關注實現功能的過程關注實現功能的過程nFor Example:用戶買車:用戶買車Java所有程序代碼,都所有程序代碼,
3、都屬于某個類屬于某個類Java的類分為兩種的類分為兩種nJava類庫類庫由由Java提供的、可供用戶調用的提供的、可供用戶調用的各種類的各種方法各種類的各種方法(我們可以使用的)(我們可以使用的)n用戶編寫的類用戶編寫的類(我們需要學習的)(我們需要學習的)Java的類Java類庫類庫我們已經使用過的我們已經使用過的nStringnMathnJOptionPanenScannerMath數學類庫數學類庫n為用戶處理數學問題提供方法(函數)為用戶處理數學問題提供方法(函數)n例如:例如:Math.PIMath.sin(double a)Math.sqrt(double a)Math.abs(in
4、t/long/float/double a)n在在Math庫中,有各種數學(方法)函數庫中,有各種數學(方法)函數自定義類用戶編寫程序用戶程序從類開始用戶程序從類開始一個程序可以有多個類一個程序可以有多個類每一個類可以有多個方法每一個類可以有多個方法有且只有一個類中,有類的有且只有一個類中,有類的main()方法方法除了除了main()方法,不同的類之間的方法可方法,不同的類之間的方法可以互相調用以互相調用類的聲明類的聲明修飾符修飾符 class 類名類名 extends 父類名父類名 implements 接口名列表接口名列表 類的成員變量聲明類的成員變量聲明; 類的方法聲明類的方法聲明;
5、這里,這里, 中的可以省略中的可以省略因此,一般的類聲明格式為:因此,一般的類聲明格式為: 修飾符修飾符 class 類名類名 【例【例6-1】定義一個二維平面上點的類定義一個二維平面上點的類class Point private int x,y; public void setPoint(int a,int b) x=a; y=b; public int getX() return x; public int getY() return y; public String toString() return (+x+,+y+); 類名:類名:Point類成員變量:類成員變量:x,y類的方法類的
6、方法(1):setPoint 設置坐標值設置坐標值類的方法類的方法(2):getX取取X坐標坐標類的方法類的方法(3):getY 取取Y坐標坐標類的方法類的方法(4):toString 獲取字符串獲取字符串格式的坐標格式的坐標修飾符修飾符 類名類名 對象名對象名= new 類名類名(實參列表實參列表);或或修飾符修飾符 類名類名 對象名;對象名;對象名對象名 = new 類名類名(實參列表實參列表);l 對象的創建對象的創建n建立了類,就可以用類創建對象建立了類,就可以用類創建對象比較比較String變量創建:變量創建: String str2 = new String(); 或者:或者: S
7、tring str3; str3 = new String(); Point p1; / 對象對象p1注意:注意:n類屬于復合數據類型,在聲明對象時,未分配空間類屬于復合數據類型,在聲明對象時,未分配空間n使用使用 new 完成對象的分配空間的任務完成對象的分配空間的任務nnew 運算符的作用是運算符的作用是 創建對象、分配空間創建對象、分配空間 p1= new Point(); / 給給P1 對象分配存儲空間對象分配存儲空間創建對象(實例6-1)n對象的引用對象的引用u引用成員變量引用成員變量對象名對象名.成員變量名成員變量名 例如:例如:p1.x=3; p1.y=5; u引用方法引用方法對
8、象名對象名.方法名方法名(參數列表參數列表) 例如:例如: int n=p1.getX(); int m=p1.getY(); class Point private int x,y; public void setPoint(int a,int b) x=a; y=b; public int getX() return x; public int getY() return y; public String toString() return (+x+,+y+); public static void main(String args)Point p1;p1= new Point();p1.
9、setPoint(3, 5);System.out.print(p1.getX();System.out.print( + p1.getY();System.out.print( + p1.toString();輸出:3 5 (3,5)Point.java Java實例對象使用【例【例6-2】定義一個表示圓形的類,能計算圓面積和周長。定義一個表示圓形的類,能計算圓面積和周長。 Circle1.javaclass Circle1 /創建對象和使用對象調用舉例創建對象和使用對象調用舉例 float r; public void setR(float x) /設置半徑設置半徑 r=x; public
10、 double area() /計算面積計算面積 return Math.PI*r*r; public double perimeter() /計算周長計算周長 return 2*Math.PI*r; public static void main(String args) double x,y; Circle1 cir=new Circle1(); /創建創建Circle1類的對象類的對象cir cir.setR(12.35f); /引用引用cir對象的對象的setR()方法方法 x=cir.area(); /引用引用cir對象的對象的area()方法方法 y=cir.perimeter()
11、; /引用引用cir對象的對象的perimeter()方法方法 System.out.println(圓面積圓面積=+x+n圓周長圓周長=+y); 運行結果:圓面積=479.1635951081852圓周長=77.59734094051286構造方法和對象的初始化構造方法和對象的初始化 在類(在類(Class)中,可以定義多種成員方法)中,可以定義多種成員方法 類中有一種特殊的成員方法,稱為類中有一種特殊的成員方法,稱為構造方法構造方法其其方法名與類名相同方法名與類名相同 使用使用 new 運算符實例化(定義)對象時,做了運算符實例化(定義)對象時,做了兩件事:兩件事:(1)為對象創建內存區域
12、)為對象創建內存區域(2)自動調用構造方法初始化成員變量自動調用構造方法初始化成員變量n構造方法的特點構造方法的特點u構造方法名與類名相同;構造方法名與類名相同;u構造方法沒有返回值;構造方法沒有返回值;u構造方法的主要作用是:構造方法的主要作用是:對對象初始化對對象初始化u構造方法不能在程序中直接調用;構造方法不能在程序中直接調用;u一個類中可以定義多個構造方法一個類中可以定義多個構造方法u用不同的參數個數區別不同的構造方法用不同的參數個數區別不同的構造方法u或用不同參數類型區別不同的構造方法或用不同參數類型區別不同的構造方法【例【例6-3】用構造方法初始化成員變量用構造方法初始化成員變量i
13、mport java.util.Scanner;class Triangle /三角形三角形 int x,y,z; public Triangle(int i,int j,int k) /構造方法,方法名和類名相同構造方法,方法名和類名相同 x=i; y=j; z=k; / 成員變量賦初值成員變量賦初值 public static boolean judge(Triangle m) / 判斷是否為直角三角形判斷是否為直角三角形 if (m.x+m.ym.z&m.x+m.zm.y&m.y+m.zm.x)& (m.x*m.x+m.y*m.y=m.z*m.z|m.x*m.x+
14、m.z*m.z=m.y*m.y| m.y*m.y+m.z*m.z=m.x*m.x) return true; else return false; public static void main(String args) Triangle t1; /聲明聲明Triangle類對象類對象t1 int a,b,c; Scanner in=new Scanner(System.in); a=in.nextInt(); b=in.nextInt(); c=in.nextInt(); t1=new Triangle(a,b,c); /實例化對象實例化對象t1,用構造方法初始化,用構造方法初始化 if(j
15、udge(t1) /調用調用judge()方法方法 System.out.println(這是一個直角三角形這是一個直角三角形); else System.out.println(這不是一個直角三角形這不是一個直角三角形); 運行輸入:運行輸入:4 3 5運行輸出:這是一個直角三角運行輸出:這是一個直角三角形形Triangle.java【例【例6-4】定義構造方法定義構造方法 P.81 class Student String name; / 定義類的成員變量定義類的成員變量 String address; int grade; Student(String x1,String x2,int
16、y) /定義構造方法定義構造方法 name=x1; address=x2; grade=y; class Student / Student.java String name; /定義類的成員變量定義類的成員變量 String address; int grade; Student(String x1,String x2,int y) /定義構造方法定義構造方法 name=x1; address=x2; grade=y; public static void main(String args) Student zhang; /聲明并創建聲明并創建zhang對象對象 zhang=new Stud
17、ent(張三張三,西安市興慶路西安市興慶路1號號,3); Student wang; /聲明并創建聲明并創建wang對象對象 wang=new Student(王五王五,西安市翠華路西安市翠華路12號號,4); System.out.println(+zhang.address+zhang.grade); System.out.println(+wang.address+wang.grade); 張三西安市興慶路1號3王五西安市翠華路12號4默認構造方法的使用默認構造方法的使用 P.80默認構造方法:指在類中沒有定義構造方法默認構造方法:指在類中沒有定義構
18、造方法用默認的類成員方法作初始化處理用默認的類成員方法作初始化處理注意:注意:Java中變量必須初始化,即賦初值才能使用中變量必須初始化,即賦初值才能使用程序運行結果如下:程序運行結果如下:null null 0張三張三 西安市興慶路西安市興慶路1號號 75class Student0 String name; /成員變量成員變量 String address; /成員變量成員變量 int score; /成員變量成員變量 public void setMessage(String x1,String x2, int x3) /成員方法成員方法 name=x1; address=x2; sco
19、re=x3; public static void main(String args) Student0 s1=new Student0(); /創建創建Student類對象類對象s1 System.out.println(+ +s1.address+ +s1.score); /輸出輸出默認構造方法默認構造方法的初始化結果的初始化結果 s1.setMessage(張三張三,西安市興慶路西安市興慶路1號號,75); /調用成員方法調用成員方法 System.out.println(+ +s1.address+ +s1.score); 【例【例6-5】使用無參數的構造方
20、法使用無參數的構造方法 (用了用了2個類個類)class Time / 類類Time private int hour; / 0-23 private int minute; / 0-59 private int second; / 0-59 public Time() setTime(0,0,0); /無參數的構造方法無參數的構造方法 public void setTime(int hh, int mm, int ss) hour = (hh = 0 & hh = 0 & mm = 0 & ss 60) ? ss : 0); public String toStrin
21、g() return (hour + : + (minute 10 ? 0 : ) + minute + : +(second = 0 & hh = 0 & mm = 0 & ss 60) ? ss : 0); public static String f0n(int n)if(n= 0 & hh = 0 & mm = 0 & ss 60) ? ss : 0); public String toString() return (hour + : + (minute 10 ? 0 : ) + minute + : + (second 10 ? 0
22、: ) + second ); public class MyTime2 / 包里的第二個類包里的第二個類 public static void main(String args) Time time = new Time(); time.hour = 11; / 非法訪問!因為非法訪問!因為hour是是private的的 System.out.println(time + time.toString(); time.setTime(11,0,0);類訪問權限 P86l聲明一個類聲明一個類l可使用的權限修飾符:可使用的權限修飾符:public、缺省、缺省l不能使用:不能使用:private、p
23、rotectedl一個一個Java源程序文件源程序文件中可包含多個類中可包含多個類l但,只能有一個類使用但,只能有一個類使用public修飾符修飾符l該類的名字與源程序文件的名字相同該類的名字與源程序文件的名字相同l有多個類時,必須運行包含有多個類時,必須運行包含main()方法的類,方法的類,否則出錯否則出錯6.2.2 類成員變量和方法u類成員變量類成員變量u使用使用static修飾的變量為修飾的變量為類成員變量類成員變量u沒有用沒有用static修飾的變量為修飾的變量為實例成員變量實例成員變量class Student String name; /實例成員變量實例成員變量 String s
24、ex; /實例成員變量實例成員變量 static int count=0; /類成員變量類成員變量 public Student(String m, String s ) /構造方法構造方法name=m; sex=s; count=count+1; /類成員變量類成員變量 類成員類成員類成員分為類成員分為n類成員變量類成員變量n類成員方法類成員方法不同的修飾符,有不同的使用規則不同的修飾符,有不同的使用規則static 是規則是規則類成員變量類成員變量u使用類創建對象時使用類創建對象時u每個對象有各自的實例成員變量每個對象有各自的實例成員變量u不同對象的實例成員變量可有不同的值;不同對象的實例
25、成員變量可有不同的值;u類成員變量被分配類成員變量被分配一個一個存儲單元存儲單元u類的所有對象共享這個類成員變量類的所有對象共享這個類成員變量u實例成員變量屬于對象,只能通過對象引用:實例成員變量屬于對象,只能通過對象引用: 對象名對象名. 實例成員變量名實例成員變量名u類成員變量屬于類類成員變量屬于類既可以通過類名訪問,既可以通過類名訪問,也可以通過對象名訪問:也可以通過對象名訪問: 對象名對象名.實例成員變量名實例成員變量名 or 類名類名.實例成員變量名實例成員變量名【例【例6-8】類成員變量和實例成員變量的對比】類成員變量和實例成員變量的對比【例【例6-8】類成員變量和實例成員變量的對
26、比】類成員變量和實例成員變量的對比class Student1 / Student1.java String name; /實例成員變量實例成員變量 String address; /實例成員變量實例成員變量 static int count=0; /類成員變量類成員變量 public Student1(String m, String a) /構造方法構造方法 name=m; address=a; count=count+1; /每創建一個對象每創建一個對象count加加1 public static void main(String args) /兩個對象用同一個兩個對象用同一個count
27、 Student1 p1=new Student1(李明李明, 杭州市西湖區杭州市西湖區); /count=1 Student1 p2=new Student1(張敏張敏, 上海市閩行區上海市閩行區); /count=2 System.out.println(+ +p1.address+ +p1.count); Student1.count=Student1.count+1; /count=3,使用類名訪問使用類名訪問 System.out.println(+ +p2.address+ +p2.count); p1.count=p1.count-1; /count=
28、2,使用對象名訪問使用對象名訪問 System.out.println(+ +p2.address+ +p2.count); 程序運行結果:程序運行結果:李明李明 杭州市西湖區杭州市西湖區 2 李明李明 p1. address 杭州市西湖區杭州市西湖區 p1.count 1 張敏張敏 p2. address 上海市閩行區上海市閩行區 2張敏張敏 上海市閩行區上海市閩行區 3張敏張敏 上海市閩行區上海市閩行區 2 3 2p2.countStudent1.count類成員方法l沒有用沒有用static修飾的方法為修飾的方法為實例成員方法實例成員方法l用
29、用static修飾的方法為修飾的方法為類成員方法類成員方法public static double area(double r) /類成員方法類成員方法 return Math.PI*r*r; u類成員方法可使用的變量類成員方法可使用的變量u本方法中聲明的局部變量本方法中聲明的局部變量u類成員變量類成員變量u但:但:不能訪問實例成員變量不能訪問實例成員變量u實例成員方法可使用的變量實例成員方法可使用的變量u本方法中聲明的局部變量本方法中聲明的局部變量u類成員變量類成員變量u實例成員變量實例成員變量double perimeter(double x, double y) / 實例成員方法實例成員方法 return 2*(x+y); static double area(double x, double y) / 類成員方法類成員方法return x*y; void print_message() / 實例成員方法實例成員方法 System.out.println(perimeter(2.1,3.5); /調用實
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025標準臨時工作合同范本
- 2025農業農村局合同工工作申請表
- 2025建筑工程拆除臨時租賃合同模板
- 《正義的呼喚:劉鑫案課件深度解析》
- 2025教師聘用合同模板
- 《高效管理網絡信息》課件
- 2025設備租賃合同格式范本
- 《如何制作課件》教程
- 2025社保用工合同示范文本
- 三角形面積(教學設計)-2024-2025學年五年級上冊數學人教版
- 考古發掘中文物的采集與保存課件
- 小學四年級地方課程安全教育教案泰山出版社
- 化學性及藥物性頜骨骨髓炎
- 神奇的植物王國課件
- 員工崗位技能考核評定表
- 項目部安全生產事故應急預案
- 垂體瘤-PPT課件
- 鉆井井控裝置
- 贛美版(江西)小學四年級美術下全冊教案
- 12隊淘汰賽_對陣表
- 我國城市馬拉松賽事發展現狀分析
評論
0/150
提交評論