国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java之旅(7)隱藏實現 & 復用類

2019-11-17 06:33:38
字體:
來源:轉載
供稿:網友

隱藏實現 & 復用類

訪問控制符, import, 每個編譯單元(.java文件)只能有一個public類,假如還有其他類,那這些類就成為這個
public類的輔助類,這是因為他們都不是public的,因此對外邊世界來說,它們都是看不到的。

編譯.java文件的時候,它里面的每個類都會產生輸出。其輸出的文件名字就是.java里面類的名字,這樣寫不了
幾個java文件就會產生一堆.class文件,但是不要希奇,一個能正常工作的java文件本來就是由一堆.class文件
組成的,當然也可以用jar把他們封裝成java Archive (JAR)文件。java解釋器會負責尋找,裝載和解釋這些
文件的。

package和import就似乎一個刀一個盾。是把一個單獨的全局名字空間分割開來,這樣不論internet上有多少人
再用java編程,你就都不會再碰到名字沖突的問題了。值得注重的是,每次創建package給它起名的時候,你也
隱含的設置了一個目錄結構。這個package必須保存在由它的名字所指示的目錄里,而這個目錄又必須在classpath
下面。

java的訪問控制符:public是眾所周知的可以任何人都可以訪問的;package權限,默認的訪問權限沒有要害詞,
但通常還是把它成為package權限,(有時也成為friendly)它的意思是所有同屬這個package的類都能訪問這個
成員,由于同一編譯單元只能同屬一個package,因此同一個編譯單元里的各個類,自動的可以進行相互訪問。
PRotected, private.

接口(interface)和實現(implementation):

類只能是package和public的,假如你不希望別人訪問這個類,你可以將他的構造函數設成private,這樣除你之外,沒人可以在創建那個類的對象了。而你則可以使用一個靜態方法來創建對象。(這招在某些場合非常管用)
還有一個實現類似功能的方法,涉及到了設計模式。

復用類

要在不改動原有代碼的前提下使用類。有兩種方法:合成(compostion)和繼續(inheritance)。

所有非primitive對象都有一個toString()方法,當編譯器需要一個String而它卻是一個對象的時候,編譯器就會自動調用這個方法。所以當編譯器從"source="+source中看到,你想把一個字符串同一個非字符串相加的時候,它就會說“由于String只能同String相加,因此我要調用source的toString(),因為只有這樣才能把它轉換成String!”。于是它就把這兩個String連起來,然后再String的形式把結果返還給System.out.println()。假如你想讓你寫的類也具備這個功能,只要寫一個toString( )方法就行了。

你可以為每個類都創建一個main(),而且這也是一種值得提倡的編程方法,因為這樣一來,測試代碼就能都放進類里了。即使程序包括了很多類,它也只會調用你在命令行下給出的那個類的main( )方法。(只要main( )是public 的就行了,至于類是不是public的,并不重要。)于是,當你輸入javaDetergent的時候,它就會調用
Detergent.main()。雖然Cleanser不是public的,但是你也可以用javaCleanser來調用Cleanser.main()。這種往每個類里都放一個main()的做法,能讓類的單元測試變得更輕易一些。做完測試之后,你也不必移除main();留下它可以供以后的測試用。

要害詞:super, extends

派生類的初始化是從基類的初始化開始的,假如都是默認的構造函數則不用處理任何問題,但若父類的構造函數是帶參數的構造函數,則需要手動利用super來調用父類的構造函數。此外,對派生類構造函數而言,調用基類的構造函數應該是它做的第一件事。

在很多情況下,清理并不是什么問題;把它留給垃圾回收器就行了。但是假如你要自己做的話,那就只能辛勞一點了,而且還要格外小心,因為在垃圾回收方面,誰都幫不上你。垃圾回收器可能永遠也不會啟動。即便它啟動了,你也沒法控制它的回收順序。最好不要依靠垃圾回收器去做任何與內存回收無關的事情。假如你要進行清理,一定要自己寫清理方法

假如Java的基類里有一個被重載了好幾次的方法,那么在派生類里重新定義那個方法,是不會把基類里定義的任何一個給遮蓋掉的(這點同C++不同)。其實在派生類里用相同的參數列表,相同的返回類型來覆寫方法的這種做法,實在是太普通了。

繼續還是合成??一般來說,合成用于新類要使用舊類的功能,而不是其接口的場合。也就是說,把對象嵌進去,用它來實現新類的功能,但是用戶看到的是新類的接口,而不是嵌進去的對象的接口。因此,你得在新類里嵌入
private的舊類對象。繼續則是要對已有的類做一番改造,以此獲得一個非凡版本。簡而言之,你要將一個較為抽象的類改造成能適用于某些特定需求的類。稍微想一下就會知道,用vehicle(車輛)對象來合成一個car(轎車)是毫無意義的——car不包含vehicle,它本來就是vehicle。繼續要表達的是一種“是(is-a)”關系,而合成表達要表達的是“有
(has-a)”關系。


未完待續。。。。。。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通榆县| 铁岭县| 麻城市| 大理市| 元江| 南岸区| 高密市| 塔河县| 沁源县| 平远县| 军事| 溆浦县| 聂拉木县| 通渭县| 彭泽县| 商城县| 图们市| 上犹县| 淳安县| 虹口区| 福鼎市| 辛集市| 海口市| 铁力市| 乌兰浩特市| 长治县| 象州县| 绥棱县| 醴陵市| 西吉县| 怀化市| 札达县| 平南县| 通江县| 花垣县| 青河县| 麻城市| 加查县| 娱乐| 邵阳市| 天津市|