面向?qū)ο蟮呐cjava1類_第1頁
面向?qū)ο蟮呐cjava1類_第2頁
面向?qū)ο蟮呐cjava1類_第3頁
面向?qū)ο蟮呐cjava1類_第4頁
面向?qū)ο蟮呐cjava1類_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1第一章第一章 Java的類的類北京郵電大學(xué)北京郵電大學(xué)經(jīng)管學(xué)院經(jīng)管學(xué)院 楊天劍楊天劍2第一章第一章 Java的類的類 1.1 有關(guān)面向?qū)ο蟮母拍钣嘘P(guān)面向?qū)ο蟮母拍?1.2 Java語言的特點語言的特點 1.3 Java的開發(fā)環(huán)境的開發(fā)環(huán)境 1.4 第一個第一個Java程序程序 1.5 Java類型系統(tǒng)類型系統(tǒng) 1.6 Java中字符串的類中字符串的類 1.7 Java中的類、方法和變量中的類、方法和變量 1.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 1.9 Java中的抽象類、接口和程序包中的抽象類、接口和程序包 1.10 對象的構(gòu)造函數(shù)對象的構(gòu)造函數(shù)31.1 有關(guān)面向?qū)ο蟮母拍钣嘘P(guān)面向

2、對象的概念 面向?qū)ο蟪绦蛟O(shè)計圍繞的幾個主要概念面向?qū)ο蟪绦蛟O(shè)計圍繞的幾個主要概念: 抽象數(shù)據(jù)類型、類、類型層次(子類),繼抽象數(shù)據(jù)類型、類、類型層次(子類),繼承性、多態(tài)性。承性、多態(tài)性。41.1 有關(guān)面向?qū)ο蟮母拍钣嘘P(guān)面向?qū)ο蟮母拍頲lass Car int color_number; int door_number; int speed; void brake() void speedUp() ; void slowDown() 計算機中計算機中的對象的原型的對象的原型 現(xiàn)實生活現(xiàn)實生活中的對象中的對象 數(shù)據(jù)抽象類型數(shù)據(jù)抽象類型51.1 有關(guān)面向?qū)ο蟮母拍钣嘘P(guān)面向?qū)ο蟮母拍?什么是類?什么

3、是類? 類是描述對象的類是描述對象的“基本原型基本原型”,它定義一種,它定義一種對象所能擁有的數(shù)據(jù)和能完成的操作對象所能擁有的數(shù)據(jù)和能完成的操作,在面向在面向?qū)ο蟮某绦蛟O(shè)計中對象的程序設(shè)計中,類是程序的基本單元。類是程序的基本單元。variablesmethods 程序中的對象程序中的對象 是類的一個實例,是類的一個實例,是一個軟件單元,是一個軟件單元,它由一組結(jié)構(gòu)化它由一組結(jié)構(gòu)化的數(shù)據(jù)和在其上的數(shù)據(jù)和在其上的一組操作構(gòu)成的一組操作構(gòu)成。61.1 有關(guān)面向?qū)ο蟮母拍钣嘘P(guān)面向?qū)ο蟮母拍?變量:即指對象的所知道的狀態(tài)變量:即指對象的所知道的狀態(tài) 方法:指對象的功能單元。方法:指對象的功能單元。 什

4、么是消息?什么是消息? 軟件對象通過相互間傳遞消息來相互作用和軟件對象通過相互間傳遞消息來相互作用和通信通信 一個消息由三部分組成一個消息由三部分組成: 1. 接受消息的對象接受消息的對象 2. 要完成方法的名字要完成方法的名字 3. 方法需要的參數(shù)方法需要的參數(shù)對象對象B對象對象 Amessage71.1 有關(guān)面向?qū)ο蟮母拍钣嘘P(guān)面向?qū)ο蟮母拍?一個例子一個例子 在程序中操作對象是類的一個實例在程序中操作對象是類的一個實例:即對象即對象 創(chuàng)建一個對象創(chuàng)建一個對象 Hello obj=new Hello(); 調(diào)用方法調(diào)用方法 obj.showString(“Hello World!”)clas

5、s Hello extend Object private String s;public Hello () Super();public void showString (String s) System.out.println(s);public String changeString(String str) s=str; return s; 81.1 有關(guān)面向?qū)ο蟮母拍钣嘘P(guān)面向?qū)ο蟮母拍?什么是封裝什么是封裝? 封裝把對象的所有組成部分組合在一起,封封裝把對象的所有組成部分組合在一起,封裝定義程序如何引用對象的數(shù)據(jù),封裝實際裝定義程序如何引用對象的數(shù)據(jù),封裝實際 私有數(shù)據(jù)私有數(shù)據(jù) 方法方

6、法上使用方法將類上使用方法將類的數(shù)據(jù)隱藏起來,的數(shù)據(jù)隱藏起來,控制用戶對類的控制用戶對類的修改和訪問數(shù)據(jù)修改和訪問數(shù)據(jù)的程度。的程度。 方法方法數(shù)據(jù)數(shù)據(jù)對象對象A對象對象B公有數(shù)據(jù)公有數(shù)據(jù)91.1 有關(guān)面向?qū)ο蟮母拍钣嘘P(guān)面向?qū)ο蟮母拍?什么是子類什么是子類? 子類是作為另一個類的擴充或修正所定義的子類是作為另一個類的擴充或修正所定義的一個類一個類.bicycle(super class)Mountain bikesRacing bikesTandem bikessub class101.1 有關(guān)面向?qū)ο蟮母拍钣嘘P(guān)面向?qū)ο蟮母拍?什么是繼承什么是繼承? 繼承是子類利用父類中定義的方法和變量就繼承

7、是子類利用父類中定義的方法和變量就像它們屬于子類本身一樣像它們屬于子類本身一樣.class Car int color_number; int door_number; int speed; push_break() add_oil() class Trash_Car extends Car double amount; fill_trash() 111.1 有關(guān)面向?qū)ο蟮母拍钣嘘P(guān)面向?qū)ο蟮母拍?什么是方法的覆蓋什么是方法的覆蓋? 在子類中重新定義父類中已有的方法。在子類中重新定義父類中已有的方法。class Car int color_number; int door_number; int

8、 speed; push_break() speed=0; add_oil() class Trash_Car extends Car double amount; fill_trash() push_break() speed=speed-10; 121.1 有關(guān)面向?qū)ο蟮母拍钣嘘P(guān)面向?qū)ο蟮母拍?什么是方法的重載什么是方法的重載(多態(tài)性多態(tài)性)? 在同一個類中至少有兩個方法用同一個名字,在同一個類中至少有兩個方法用同一個名字,但有不同的參數(shù)。但有不同的參數(shù)。類類void show(int int_num)void show(double double_num)void show(nit ni

9、t_ um, float float_um)1231.23123,1.23131.2 Java語言的特點語言的特點 Java是什么?是什么? Java= “C+”-“復(fù)雜性和奇異性復(fù)雜性和奇異性”+“安全性和可移植性安全性和可移植性” Java由那些特性?由那些特性? (1) 面向?qū)ο竺嫦驅(qū)ο?封裝性、多態(tài)性、繼承性、動態(tài)鏈接封裝性、多態(tài)性、繼承性、動態(tài)鏈接 (2) 操作平臺無關(guān)性操作平臺無關(guān)性 嚴(yán)格的語言定義嚴(yán)格的語言定義:“沒有依據(jù)機器的不同而不沒有依據(jù)機器的不同而不同同” 或或“由編譯器決定由編譯器決定”等字眼等字眼,最后的目標(biāo)最后的目標(biāo)碼都是一致的碼都是一致的,初值都是確定的初值都是確

10、定的141.2 Java語言的特點語言的特點 兩種工作模式的比較兩種工作模式的比較源源程程序序Java編譯器編譯器SPARCpentiumPowerpc中間碼中間碼PowerpcpentiumSPARC二進(jìn)制二進(jìn)制源源程程序序SPARCPowerpcpentiumPowerpcpentiumSPARC編譯器編譯器二進(jìn)制二進(jìn)制Java解釋器解釋器151.2 Java語言的特點語言的特點 .編譯編譯,沒有絕對地址沒有絕對地址調(diào)入包含調(diào)入包含,繼承所用繼承所用道的所有類道的所有類, 內(nèi)存分內(nèi)存分配確定配確定,編程真正可編程真正可執(zhí)行的機器碼執(zhí)行的機器碼 Java源程序源程序(.java文件文件)Ja

11、va編譯器編譯器Java Bytecode(.class文件文件)系統(tǒng)執(zhí)行平臺系統(tǒng)執(zhí)行平臺Bytecode 解釋器解釋器Bytecode 載入器載入器字節(jié)碼校驗器字節(jié)碼校驗器不存在偽造的指針不存在偽造的指針不違反訪問權(quán)限不違反訪問權(quán)限不非法訪問對象不非法訪問對象不導(dǎo)致操作棧溢出不導(dǎo)致操作棧溢出 161.2 Java語言的特點語言的特點 Java虛擬機虛擬機JavainterpreterJust-in-timecompilerRuntime SystemOperating SystemHardware不同的操作系統(tǒng)有不同的虛不同的操作系統(tǒng)有不同的虛擬機擬機.它類似一個小巧而高效的它類似一個小巧而

12、高效的CPU.byte-code代碼是與平臺無關(guān)的代碼是與平臺無關(guān)的是虛擬機的機器指令是虛擬機的機器指令.Java字節(jié)代碼運行的兩種方式字節(jié)代碼運行的兩種方式:interpreter(解釋方式解釋方式)Just-in-time(即時編譯即時編譯):有代碼有代碼生成器將字節(jié)代碼轉(zhuǎn)換成本機生成器將字節(jié)代碼轉(zhuǎn)換成本機的機器代碼的機器代碼,然后可以以較高速然后可以以較高速度執(zhí)行度執(zhí)行.171.2 Java語言的特點語言的特點 (3) 安全問題安全問題 Java是在網(wǎng)絡(luò)環(huán)境下使用的語言是在網(wǎng)絡(luò)環(huán)境下使用的語言 一個安全的網(wǎng)絡(luò)至少要防止以下幾種破壞的一個安全的網(wǎng)絡(luò)至少要防止以下幾種破壞的可能性可能性: 毀

13、滅系統(tǒng)資源毀滅系統(tǒng)資源 消耗系統(tǒng)資源消耗系統(tǒng)資源 挖掘系統(tǒng)或個人機密挖掘系統(tǒng)或個人機密 騷擾正常工作的進(jìn)行騷擾正常工作的進(jìn)行181.2 Java語言的特點語言的特點Java源程序源程序(.java文件文件)Java編譯器編譯器Java Bytecode(.class文件文件)Bytecode 載入器載入器Bytecode 解釋器解釋器系統(tǒng)執(zhí)行平臺系統(tǒng)執(zhí)行平臺語言定義語言定義publicprotectedprivatefinal取消指針取消指針自動回收自動回收垃圾垃圾Bytecode檢查檢查限定對象的限定對象的存取權(quán)限存取權(quán)限程序執(zhí)行系統(tǒng)程序執(zhí)行系統(tǒng)WWW瀏覽器瀏覽器限制限制Java小應(yīng)用程序小

14、應(yīng)用程序的不正當(dāng)使用的不正當(dāng)使用191.2 Java語言的特點語言的特點 (4) 多線程多線程 Java提供現(xiàn)成的類提供現(xiàn)成的類Thread,只要繼承這個類就可以,只要繼承這個類就可以編寫多線程的程序。編寫多線程的程序。 (5) Java與與C及及C+的區(qū)別的區(qū)別 不再有不再有#include 和和#define 等于處理功能等于處理功能 不再有不再有structure,union及及typedef 不再有函數(shù)、不再有指針、不再有多重繼承不再有函數(shù)、不再有指針、不再有多重繼承 不再有不再有g(shù)oto 不再有操作符重載不再有操作符重載(Operator Overloading) 取消自動類型轉(zhuǎn)換取

15、消自動類型轉(zhuǎn)換,要求強制轉(zhuǎn)換要求強制轉(zhuǎn)換201.3 Java的開發(fā)環(huán)境的開發(fā)環(huán)境 Java開發(fā)環(huán)境開發(fā)環(huán)境 JDK JDK中有中有Java編譯器和編譯器和bytecode解釋器解釋器Appletviewer是小應(yīng)用程序的是小應(yīng)用程序的bytecode解釋器解釋器 JDK的安裝的安裝 直接執(zhí)行直接執(zhí)行JDK.exe211.3 Java的開發(fā)環(huán)境的開發(fā)環(huán)境產(chǎn)生如下目錄結(jié)構(gòu)產(chǎn)生如下目錄結(jié)構(gòu)javabin的目錄下包含義下主要文件的目錄下包含義下主要文件:javac: Java編譯器編譯器, 用來將用來將java程序編譯成程序編譯成 Bytecodejava: Java解釋器解釋器,執(zhí)行已經(jīng)轉(zhuǎn)換成執(zhí)行已

16、經(jīng)轉(zhuǎn)換成Bytecode的的 java應(yīng)用程序應(yīng)用程序.jdb: Java調(diào)試器調(diào)試器, 用來調(diào)試用來調(diào)試java程序程序javap: 反編譯反編譯,將類文件還原回方法和變量將類文件還原回方法和變量.javadoc:文檔生成器:文檔生成器,創(chuàng)建創(chuàng)建HTML文件文件appletviwer : Java解釋器解釋器, 用來解釋已經(jīng)轉(zhuǎn)換成用來解釋已經(jīng)轉(zhuǎn)換成 Bytecode的的java小應(yīng)用程序小應(yīng)用程序.221.3 Java的開發(fā)環(huán)境的開發(fā)環(huán)境 javalib子目錄子目錄 庫函數(shù)庫函數(shù),其中其中classese.zip不要解開不要解開. 在在autoexec.bat中加入以下兩條命令中加入以下兩條

17、命令1. PATH c:javabin2. SET CLASSPATH=. ; c:.libclasses.zip; c:myclasses;231.3 Java的開發(fā)環(huán)境的開發(fā)環(huán)境C:javabinlibclasses.zipjavacjavaappletviewer用戶類文件用戶類文件所在目錄所在目錄myclasses當(dāng)前目錄當(dāng)前目錄241.3 Java的開發(fā)環(huán)境的開發(fā)環(huán)境 vj1.1+的使用的使用 1.進(jìn)入進(jìn)入vj,創(chuàng)建一個創(chuàng)建一個project 2.加入加入java文件文件 3. 編輯編輯java文件文件 4. 編譯編譯java文件文件 5. Build一個一個project文件文件

18、6. 運行運行java程序程序 -如果是小應(yīng)用程序如果是小應(yīng)用程序,則直接在則直接在VJ環(huán)境下運行環(huán)境下運行 -如果是應(yīng)用程序如果是應(yīng)用程序,則在則在dos下運行下運行251.4 你的第一個你的第一個Java程序程序 編輯存盤:主類名編輯存盤:主類名(含有含有main方法方法)和和 文件文件名要名要一致性一致性 HelloWorldApp.java 編譯程序編譯程序 : javac HelloWorldApp.java 運行程序運行程序 : java HelloWorldApp “myjava” 運行結(jié)果運行結(jié)果 : Hi, myjavaclass HelloWorldApp public s

19、tatic void main(String args) System.out.println(“Hi, ”+args0); Java應(yīng)用和應(yīng)用和Java小應(yīng)用程序小應(yīng)用程序261.4 你的第一個你的第一個Java程序程序1. 聲明一個類聲明一個類 : public class HelloWorldApp , 類名的第一個字母要大寫類名的第一個字母要大寫2. 一個類中可有很多方法一個類中可有很多方法, main方法是運行程方法是運行程序的第一個方法,方法名的第一個字母要小序的第一個方法,方法名的第一個字母要小寫寫.3. System.out.println是向屏幕輸出是向屏幕輸出,相當(dāng)于相當(dāng)于

20、C中中的的printf();public class HelloWorldApp public static void main(String args) System.out.println(“Hi, ”+args0); 271.4 你的第一個你的第一個Java程序程序4. 命令行參數(shù)的獲取命令行參數(shù)的獲取 c:java HelloWorldApp myjava!6. 字符串的拼接字符串的拼接public class HelloWorldApp public static void main(String args) System.out.println(“Hi, ”+args0); 281

21、.4 你的第一個你的第一個Java程序程序Java小應(yīng)用程序不能直接執(zhí)行和使用小應(yīng)用程序不能直接執(zhí)行和使用,必須要在必須要在瀏覽器中執(zhí)行瀏覽器中執(zhí)行import java.applet.Applet;import java.awt.*;public class HelloApplet extends Applet public void paint(Graphics g) g.drawString(“Hello World”,0,50); 編輯存盤:編輯存盤: 主類名主類名(extends Applet)和文件名一致和文件名一致編譯代碼編譯代碼 : javac HelloApplet.java

22、編寫編寫HTML文件文件 : HelloApplet.html291.4 你的第一個你的第一個Java程序程序運行運行applet程序程序: 1. appletviwer HelloApplet.html 2. 在瀏覽器中運行在瀏覽器中運行 運行結(jié)果運行結(jié)果:Hello World!301.4 你的第一個你的第一個Java程序程序 理解程序理解程序1. import語句相當(dāng)于語句相當(dāng)于C語言中的語言中的include每每 2. 每一個每一個applet都是都是java.applet.Applet的子類的子類 用用extends繼承繼承3. applet中沒有中沒有main方法方法import

23、java.applet.Applet; import java.awt.*;public class HelloApplet extends Applet public void paint(Graphics g) g.drawString(“Hello World”,0,50); 311.4 你的第一個你的第一個Java程序程序4. 當(dāng)當(dāng)applet被瀏覽器運行時被瀏覽器運行時,paint語句自動執(zhí)行語句自動執(zhí)行5. 在在applet中與屏幕輸出有關(guān)的操作通過中與屏幕輸出有關(guān)的操作通過Graphics對對象來實現(xiàn)象來實現(xiàn)6. 一個一個Java源文件內(nèi)最多只能有一個源文件內(nèi)最多只能有一個pub

24、lic 類類,稱為稱為主類,且必須和文件名同名主類,且必須和文件名同名import java.applet.Applet; import java.awt.*;public class HelloApplet extends Applet public void paint(Graphics g) g.drawString(“Hello World”,0,50); 321.5 Java類型系統(tǒng)類型系統(tǒng)Java type systemprimitivereferencenullcharnumericbooleanclassinterface arrayintegralfloating-point

25、byteshortintlongfloatdouble331.5 Java類型系統(tǒng)類型系統(tǒng) byte 8 位位 short 16位位 int 32 位位 long 64位位 float 32位位 double 64位位 char 16位位 341.5 Java類型系統(tǒng)類型系統(tǒng) 程序程序:保留字保留字,標(biāo)識符標(biāo)識符(類名、域名、方法名、類名、域名、方法名、符號常量、局部變量,標(biāo)號、符號常量、局部變量,標(biāo)號、),操作符、,操作符、界定符,字面常量。界定符,字面常量。 聲明一個變量聲明一個變量 int data=10; Java中的操作符中的操作符:與與C基本一致基本一致 Java中不再有指針了中不

26、再有指針了351.5 Java類型系統(tǒng)類型系統(tǒng) 在在Java中中“引用引用” 是指向一個對象在內(nèi)存中是指向一個對象在內(nèi)存中的位置的位置,在本質(zhì)上是一種帶有很強的完整性和在本質(zhì)上是一種帶有很強的完整性和安全性的限制的指針安全性的限制的指針. 當(dāng)你聲明某個類當(dāng)你聲明某個類,接口或數(shù)組類型的一個變量接口或數(shù)組類型的一個變量時時,那個變量的值總是某個對象的引用或者是那個變量的值總是某個對象的引用或者是null引用引用. 指針就是簡單的地址而已指針就是簡單的地址而已,引用除了表示地址引用除了表示地址而外而外,還象被引用的數(shù)據(jù)對象的縮影還象被引用的數(shù)據(jù)對象的縮影,還提供其還提供其他信息他信息. 指針可以有

27、指針可以有+,-運算運算,引用不可以運算引用不可以運算.361.5 Java類型系統(tǒng)類型系統(tǒng)s1s210001s2=s1;a string10001class Mydate int year; int month; int day; Mydate today=new Mydate();00010008todays1=“a string”; 例例: String s1;String s2;371.5 Java類型系統(tǒng)類型系統(tǒng) 能夠動態(tài)取得的內(nèi)存有兩種能夠動態(tài)取得的內(nèi)存有兩種,一種是對象實體一種是對象實體,一種數(shù)組一種數(shù)組. Java用用new申請內(nèi)存申請內(nèi)存,不需要自己釋放不用的不需要自己釋放不

28、用的內(nèi)存內(nèi)存. 在在Java中,定義數(shù)組時不必給出數(shù)組的大小,中,定義數(shù)組時不必給出數(shù)組的大小,因為因為Java的數(shù)組是動態(tài)分配的的數(shù)組是動態(tài)分配的。 數(shù)組變量實際上是一個引用變量,因此要實數(shù)組變量實際上是一個引用變量,因此要實例化才能使用。例化才能使用。 例:例:int Array; Array=new int8;381.5 Java類型系統(tǒng)類型系統(tǒng) 例:例:String arrayOfString=new String10;每個數(shù)組元素包含一個對字符串對象的引用,每個數(shù)組元素包含一個對字符串對象的引用,此時值分配了包含字符串引用的空間,并沒此時值分配了包含字符串引用的空間,并沒有對字符串本

29、身分配內(nèi)存,此時不能訪問。有對字符串本身分配內(nèi)存,此時不能訪問。arrayOfStringfor(int i=0;iarrayString.length;i+) arrayOfStringi=new String(“Hello”+i)arrayOfString0arrayOfString1arrayOfString8arrayOfString9對數(shù)組的引用對數(shù)組的引用對對字字符符串串的的引引用用391.6 Java中的字符串中的字符串 Java中的字符串類中的字符串類 String和StringBuffer String 類的定義和實例的生成類的定義和實例的生成 例: String str;

30、str=“this is a string” 或: String str1=new String(“hello”); 或: String str2=“aaaa”; String類與其它類型的轉(zhuǎn)換類與其它類型的轉(zhuǎn)換 例1:將實型數(shù)轉(zhuǎn)換成字符串 System.out.println(String.valueOf(Math.PI);.401.6 Java中的字符串中的字符串 有兩個字符串有兩個字符串str1,str2 str1=str2; 是指兩個引用指向同一個地址是指兩個引用指向同一個地址 str1.equals(str2) 是指兩個字符串內(nèi)容相等是指兩個字符串內(nèi)容相等 獲取獲取String對象的

31、信息對象的信息 例如:例如:String s=“this is a string”; int len=s.length(); boolean result=s.equal(“this is a test”); char ch=s.charAt(6);411.6 Java中的字符串中的字符串 StringBuffer的字符串的內(nèi)容是可以改變的的字符串的內(nèi)容是可以改變的 創(chuàng)建創(chuàng)建StringBuffer對象對象 StringBuffer str=new Stringbuffer(“hello”); 獲取獲取StringBuffer對象的信息對象的信息 int len=str.length();例例

32、:StringBuffer sb=new StringBuffer(“Drink Java!”); sb.insert(6,”Hot ”); System.out.println(sb.toString(); Drink Hot Java!System.out.println接受的是接受的是String類類421.7 Java中的類、方法和變量中的類、方法和變量 試用一個簡單的類試用一個簡單的類class Car int car_number; void set_number(int car_num) car_number=car_num; void show_number() System.

33、out.println (“My car No. is :”+car_number); class CarDemo public static void main(String args) Car Democar=new Car(); DemoCar.set_number(3838); DemoCar.show_number(); My car number is 3838431.7 Java中的類、方法和變量中的類、方法和變量 類的繼承類的繼承 關(guān)系關(guān)系class Car int car_number; void set_number(int car_num) car_number=car_

34、num; void show_number() System.out.println (“My car No. is :”+car_number); class TrashCar extends Car int capacity; void set_capacity(int trash_car_capacity) capacity=trash_car_capacity; void show_capacity(); System.out.println(“My capacity is: ”+ capacity);441.7 Java中的類、方法和變量中的類、方法和變量 TrashCar中繼承了中

35、繼承了Car中的兩個方法中的兩個方法class CarDemo public static void main(String args) TrashCar DemoTrashCar=new TrashCar(); DemoTrashCar.set_number(4949); DemoTrashCar.set_capacity(20); DemoTrashCar.show_number(); DemoTrashCar.show_capacity(); Car是父類是父類, TrashCar是子類是子類451.7 Java中的類、方法和變量中的類、方法和變量 何時選擇繼承性何時選擇繼承性? 一個很

36、好的經(jīng)驗一個很好的經(jīng)驗: “B是一個是一個A嗎嗎?” 如果是則讓如果是則讓B做做A的子類的子類.常犯的錯誤常犯的錯誤A有一個有一個B嗎嗎? 例如讓汽例如讓汽車輪子成為汽車的子類是錯誤的車輪子成為汽車的子類是錯誤的461.7 Java中的類、方法和變量中的類、方法和變量 類的嚴(yán)格定義及修飾字類的嚴(yán)格定義及修飾字類的修飾字類的修飾字 class 類名稱類名稱 extends 父類名稱父類名稱 . public, abstract, final或者沒有或者沒有變量修飾字變量修飾字 變量數(shù)據(jù)類型變量數(shù)據(jù)類型 變量名變量名1,變量名變量名2=變量初值變量初值;方法修飾字方法修飾字 方法的返回值類型方法的

37、返回值類型 方法名稱方法名稱(參數(shù)參數(shù)1,參數(shù)參數(shù)2, /方法的內(nèi)容方法的內(nèi)容方法和變量的定義及修飾字方法和變量的定義及修飾字public、protected、private471.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 每個類都創(chuàng)造了有自己的名字空間,指方法每個類都創(chuàng)造了有自己的名字空間,指方法和變量可以知道彼此的存在,可以使用。和變量可以知道彼此的存在,可以使用。 abstract類不能直接產(chǎn)生屬于這個類的對象類不能直接產(chǎn)生屬于這個類的對象 final類不能被其他任何類所繼承類不能被其他任何類所繼承(安全的考慮安全的考慮) public類不但可以被同一程序包中的其它類使類不但可以被同

38、一程序包中的其它類使用用,別的程序包中的類也可以使用別的程序包中的類也可以使用. friendly(缺省缺省)類只能被本包中的其它類使用類只能被本包中的其它類使用481.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 變量和方法的修飾字變量和方法的修飾字public、protected、private public: 任何其它類、對象只要可以看到這個任何其它類、對象只要可以看到這個類的話,那么它就可以存取變量的數(shù)據(jù),或類的話,那么它就可以存取變量的數(shù)據(jù),或使用方法。使用方法。class ABC public int pub_i=5; public void show() System.out.p

39、rintln (“pub_i”+pub_i);491.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則class Demo public static void main(String args) ABC abc=new ABC(); System.out.println(“abc.pub_i”+abc.pub_i); abc.pub_i=10; abc.show(); abc.pub_i=5pub_i=10;501.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 protected變量和方法變量和方法 如果一個類中變量或方法有修飾字如果一個類中變量或方法有修飾字protected,同一類,同一包可

40、以使用。不同包的類要使同一類,同一包可以使用。不同包的類要使用,必須是該類的子類可以存取變量或調(diào)用用,必須是該類的子類可以存取變量或調(diào)用public class ABC protected int pro_i=5; protected void show() System.out.println (“pro_i=” +pro_i;) 511.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 不同中的類不能使用不同中的類不能使用import mytest.pack.ABC;class DEF public static void main(String args) ABC abc=new ABC()

41、; System.out.println (“_i=“+_i); abc.pub_i=10; abc.show(); 52import mytest.pack.ABC;class DEF extends ABC public static void main(String agrs) DEF def=new DEF(); System.out.println(def.i); def.i=10; def.show(); pro_i=5pro_i=101.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 不同包但是是子類不同包但是是子類531.8 Java名空間及訪問規(guī)則名

42、空間及訪問規(guī)則 private 不允許任何其他類存取和調(diào)用不允許任何其他類存取和調(diào)用 friendly(前邊沒有修飾字的情況前邊沒有修飾字的情況) 在同一程序包中出現(xiàn)的類才可以直接使用在同一程序包中出現(xiàn)的類才可以直接使用它的數(shù)據(jù)和方法它的數(shù)據(jù)和方法541.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 當(dāng)子類中的變量名與父類的相同當(dāng)子類中的變量名與父類的相同,原來的變量原來的變量被遮蓋被遮蓋.class A int data_a=3;class B extends A int data_a=5;class C extends B void print_out() System.out.print

43、ln(“data_a= ”+data_a); System.out.println(“A.data_a= ”+A.data_a); System.out.println(“B.data_a= ”+B.data_a); data_a=5A.data_a=3B.data_a=5class demo public static void main(String args) C c=new C(); c.println_out(); 551.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 方法的覆蓋方法的覆蓋(overriding)和重載和重載(overloading) 子孫類中定義的方法和祖先類中某個

44、方法同子孫類中定義的方法和祖先類中某個方法同名名,同參數(shù)行同參數(shù)行,則祖先類中的該方法被則祖先類中的該方法被覆蓋覆蓋. 方法的方法的重載重載是指一個對象的多態(tài)性是指一個對象的多態(tài)性,即多個方即多個方法用相同的名稱法用相同的名稱,但參數(shù)行不同但參數(shù)行不同.類類void show(int int_num)void show(double double_num)void show(nit nit_ um, float float_um)1231.23123,1.23561.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 到此為止到此為止-final final在方法之前在方法之前,防止該方法被覆蓋防止

45、該方法被覆蓋. final在類之前在類之前,標(biāo)是該類不能被繼承標(biāo)是該類不能被繼承 final在變量之前在變量之前,定義一個常量定義一個常量. 屬于類的變量和方法屬于類的變量和方法-static static 在變量或方法之前在變量或方法之前, 表明它們是屬于類的表明它們是屬于類的class ABCD char data; static int share_data; class Demo ABCD a,b,c,dobject bchar dataobject cchar dataObject bchar datastatic intshare_dataobject bchar data571.

46、8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 靜態(tài)變量在各實例間共享靜態(tài)變量在各實例間共享 如果是如果是public靜態(tài)變量靜態(tài)變量,則其它類可以不通過則其它類可以不通過實例化訪問它們實例化訪問它們 靜態(tài)方法稱為類的方法靜態(tài)方法稱為類的方法,因此不用實例化即可因此不用實例化即可調(diào)用調(diào)用(面向過程面向過程) 一個對象的方法可以訪問對象的數(shù)據(jù)成員一個對象的方法可以訪問對象的數(shù)據(jù)成員,盡盡管不屬于方法的局部變量管不屬于方法的局部變量 一個類的方法只能訪問自己的局部變量一個類的方法只能訪問自己的局部變量581.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 例例:不正確的引用不正確的引用 class S

47、taticError String mystring=“hello”; public static void main(String args) System.out.println(mystring); 錯誤信息錯誤信息:cant make a static reference to nonstatic variable. 為什么不正確為什么不正確? 只有對象的方法可以訪問對只有對象的方法可以訪問對象的變量象的變量.591.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 解決的辦法解決的辦法: 1. 將變量改稱類變量將變量改稱類變量 class StaticError static Strin

48、g mystring=“hello”; public static void main(String args) System.out.println(mystring); 601.8 Java名空間及訪問規(guī)則名空間及訪問規(guī)則 2. 先創(chuàng)建一個類的實例先創(chuàng)建一個類的實例 class NoStaticError public static void main(String args) String mystring=“hello”; System.out.println(mystring); 611.9 Java中的抽象類、接口和程序包中的抽象類、接口和程序包 抽象類是指不能直接被實例化的類抽象

49、類是指不能直接被實例化的類,因此一般因此一般作為其它類的超類作為其它類的超類,與與final類正好相反類正好相反 抽象類中的抽象的方法抽象類中的抽象的方法-在該類中定義但不在在該類中定義但不在該類中提供實現(xiàn)該類中提供實現(xiàn),由繼承類提供細(xì)節(jié)由繼承類提供細(xì)節(jié) public abstract class SomeAbstractClass void method1() System.out.println(“Hi, Java”); void method2(); 定義抽象方法的類必須是抽象類定義抽象方法的類必須是抽象類.621.9 Java中的抽象類、接口和程序包中的抽象類、接口和程序包/已有兩個類

50、已有兩個類CircleCircle和和Rectangle,Rectangle,完成相關(guān)參數(shù)的計算完成相關(guān)參數(shù)的計算 class Circle class Circle public int r; public int r; Circle(int r) this.r=r Circle(int r) this.r=r; /this /this指指 這對象的這對象的 public int area() return 3 public int area() return 3* *r r* *r; /r; /取近似取近似 class Rectange class Rectange public int

51、width,height; / public int width,height; /這里不需這里不需thisthis Rectangle (int w, int h) width=w,height=h; Rectangle (int w, int h) width=w,height=h; public int area() public int area() return width return width* *height; height; 631.9 Java中的抽象類、接口和程序包中的抽象類、接口和程序包 假設(shè)有若干個假設(shè)有若干個Circle,以及若干個以及若干個Rectangle,希

52、望計算希望計算它們的總面積它們的總面積,直截了當(dāng)?shù)淖龇ㄊ菍⑺鼈兎謩e放到兩直截了當(dāng)?shù)淖龇ㄊ菍⑺鼈兎謩e放到兩個數(shù)組中個數(shù)組中,用兩個循環(huán)用兩個循環(huán),加上一個加法加上一個加法,這種做法是不這種做法是不漂亮的漂亮的 如果還有其它形狀如果還有其它形狀,triangle,ellipses等等,上述方法顯得上述方法顯得“累贅累贅”,我們希望有一種統(tǒng)一的表示我們希望有一種統(tǒng)一的表示,例如用一個例如用一個數(shù)組數(shù)組shape,接受所有的形狀接受所有的形狀,然后用然后用 for (i=0;ishape.length;i+) for (i=0;ishape.length;i+) area_total+=shapei.

53、area(); area_total+=shapei.area();641.9 Java中的抽象、接口和程序包中的抽象、接口和程序包abstract class Shape abstract float area();class Circle extends Shape public int r; Circle(int r) this.r=r; public float area() return 3.14*r*r; class Square extends Shapepublic int width,height; Rectangle (int w, int h) width=w,heigh

54、t=h; public float area() return width*height; 651.9 Java中的抽象類、接口和程序包中的抽象類、接口和程序包 利用接口可實現(xiàn)多重利用接口可實現(xiàn)多重 繼繼承承(可同時實現(xiàn)多個接口)可同時實現(xiàn)多個接口) 接口的作用和抽象類接口的作用和抽象類 類似類似,指定原型指定原型,不直不直 接定義方法的內(nèi)容接定義方法的內(nèi)容. 關(guān)鍵字關(guān)鍵字implement用來用來實現(xiàn)方法實現(xiàn)方法,即在使用時要即在使用時要用給出方法的實際內(nèi)容用給出方法的實際內(nèi)容 接口中的方法和變量接口中的方法和變量 是是public的的interface Stack void push(ob

55、ject x); object pop();class A extends Applet implements Stack void push(object x) ;/具體內(nèi)容具體內(nèi)容 object pop() ;/具體內(nèi)容具體內(nèi)容 661.9 Java中的抽象類、接口和程序包中的抽象類、接口和程序包 程序包:程序包:相當(dāng)于其它語言中的庫函數(shù)相當(dāng)于其它語言中的庫函數(shù) 打包打包package Graphics;class Square ;class Circle ;class Triangle ; 使用程序包中的類要用使用程序包中的類要用import命令命令.表示路表示路徑徑,*表示使用包中的所

56、有類表示使用包中的所有類 import java.io.FileInputStream; import java.io.*;iojavaFileInputStream671.10 對象的構(gòu)造函數(shù)對象的構(gòu)造函數(shù) 使用使用new來做內(nèi)存配置來做內(nèi)存配置class Demo1 /數(shù)組的配置數(shù)組的配置 public static void main(String args) int array; array=new int55; array14=5; class myClass /對象實體的產(chǎn)生對象實體的產(chǎn)生 int data=5;class Demo2 public static void main

57、(String args) myClass obj;/建立一個引用建立一個引用 obj=new myClass(); System.out.println(obj.data); 681.10 對象的構(gòu)造函數(shù)對象的構(gòu)造函數(shù) Constructor和和finalizer constructor(構(gòu)造函數(shù)構(gòu)造函數(shù)),在一個類中和類同名在一個類中和類同名的方法叫構(gòu)造函數(shù)的方法叫構(gòu)造函數(shù).系統(tǒng)在產(chǎn)生對象時會自動系統(tǒng)在產(chǎn)生對象時會自動執(zhí)行執(zhí)行.class Point int x,y; Point() x =0;y=0; Point(int new_x,int new_y) x=new_x,y=new_y; class UsePoint Point point_A=new Point(); Point point_B=new Point(5,7);691.10 對象的構(gòu)造函數(shù)對象的構(gòu)造函數(shù) 構(gòu)造函數(shù)應(yīng)包含哪些內(nèi)容構(gòu)造函數(shù)應(yīng)包含哪些內(nèi)容?

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論