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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JAVA中幾個(gè)易混淆關(guān)鍵詞的理解

2019-11-18 14:29:34
字體:
供稿:網(wǎng)友

  行為規(guī)范了你能對對象發(fā)出的請求。你的CLASS,也就是對象,也就是MM,你把她設(shè)計(jì)出來了,而且你很BT,只給她設(shè)計(jì)了兩個(gè)行為:愛我()和MAKE愛與我()。那么她便不可能接受其它客戶端class(某個(gè)帥哥?)的請求,假如在某個(gè)class里,你寫成了MM.愛F4(),那么編譯器就會(huì)出錯(cuò)。
你理所當(dāng)然把MM的屬性設(shè)成美,你不希望別人來改變這個(gè)事實(shí),那么,你就要把這個(gè)屬性定義為PRivate,這樣MM便不會(huì)在第二天醒來成為傳說中的KL。這在第一章里標(biāo)題為:被隱藏的實(shí)施細(xì)節(jié)。一個(gè)屬性,有四種修飾符,public,private,protected,空(默認(rèn),friendly)。分別代表的意思是任何對象可以訪問,本對象內(nèi)部可以訪問,本對象(class)的繼續(xù)者可以訪問,同一個(gè)包(package)的其它對象可以訪問。
我們總是想盡可能地讓自己的代碼變的簡潔,這便需要重復(fù)運(yùn)用實(shí)現(xiàn)碼。java提供了這種方式,其途徑有兩種:組合和繼續(xù),假設(shè)有一個(gè)類為A,A有一個(gè)行為doSomething(),還有一個(gè)類B,不也想do something,那么你可以在B里產(chǎn)生一個(gè)方法doSomethingToo( A.doSomething(); )。這叫做組合。繼續(xù)是另外一種方法,你可以直接用要害詞extends,讓B繼續(xù)自A,那么你不用非凡額外表達(dá),B在外界看來也是有doSomething的能力的。那么我們要問,我們什么時(shí)候要組合,什么時(shí)候用繼續(xù)呢?BRUCE講,當(dāng)B is a A的時(shí)候我們用繼續(xù)。這不太好理解,我們再舉個(gè)MM的例子。MM具備吃飯(eatYou( 進(jìn)食;消化))的行為,MM衍生開來有好色的MM、愛打屁的MM等,但她們都是MM,也就是is a的關(guān)系,這個(gè)時(shí)候你要設(shè)計(jì)好色的MM的時(shí)候就用繼續(xù),用extends。而GG不是MM,但是GG is like a MM,因?yàn)镚G也可以吃飯。這個(gè)時(shí)候我們就不用再去寫eatYou()這個(gè)方法了,直接在GG這個(gè)類里寫eatYou( MM.eatYou(); )那么,GG也具備了進(jìn)食、消化的功能。其實(shí)我們要經(jīng)常用到組合,在程序里,用繼續(xù)的地方是比較少的。
在繼續(xù)當(dāng)中,有兩個(gè)非凡行為需要我們關(guān)注:覆寫(overriding)和重載(overloading)。現(xiàn)在你只需記住:假如base class和derive class的某個(gè)方法名稱相同,引數(shù)相同,則為覆寫(overriding),名稱相同,引數(shù)相同,則為重載(overloading)。

面向?qū)ο笠粋€(gè)顯著的優(yōu)點(diǎn)就是多形(多態(tài))性。我本來是不想在這第一部分寫代碼的,但是似乎這個(gè)問題用語言表達(dá)不夠直觀,所以就寫了個(gè)最簡單的能說明多形性的問題。看代碼先。。。
//Love.java
class MM{
public void toSeeGG(){
System.out.println("xxx");
}
}

class HaoseMM extends MM{
public void toSeeGG(){
System.out.println("誘惑GG!!!");
}
}

class BenfenMM extends MM{
public void toSeeGG(){
System.out.println("好羞澀哦....");
}
}

public class Love{
public static void loveGG(MM i){
i.toSeeGG();
}
public static void main(String[] args){
MM mm1 = new HaoseMM();
MM mm2 = new BenfenMM();
loveGG(mm1);
loveGG(mm2);
}
}
該代碼運(yùn)行的結(jié)果是:

誘惑GG!!!
好羞澀哦....

我們看到由MM衍生出來有好色MM(HaoseMM),本分MM(BenMM),MM們都可能會(huì)看到帥哥,但是好色MM和本分MM看帥哥的眼神是不一樣的,如程序中定義。在愛(Love)這個(gè)類里,我們定義一個(gè)方法loveGG,我們給它傳遞一個(gè)參數(shù),是基類(base class)MM,然后toSeeGG()。通過本文最開頭的描訴,我們知道,HaoseMM和BenMM與MM的關(guān)系是is a的關(guān)系,所以我們在用到loveGG(mm1)和loveGG(mm2)時(shí)候編譯器不會(huì)出錯(cuò)。我們看到,程序自動(dòng)各自執(zhí)行了haoseMM和BenfenMM的toSeeGG(),而不是打印出“xxx”。這就是多形性。之所以會(huì)如此神奇,是因?yàn)镴AVA運(yùn)行時(shí)環(huán)境提供了動(dòng)態(tài)綁定技術(shù)。動(dòng)態(tài)綁定會(huì)讓你產(chǎn)生的MM在JAVA運(yùn)行時(shí)環(huán)境里按照你的指示分別作出行為。OK,我們不需要知道動(dòng)態(tài)綁定是怎么運(yùn)做的,我們只要知道這是什么,因?yàn)槲覀冞€在第一章。上溯造型(upcasting)這個(gè)概念也在這里被提出來了。在loveGG(MM i)這個(gè)方法里,方法接受的是MM,可是loveGG也接受HaoseMM和BenfenMM,這個(gè)特性就叫上溯造型。

我們在上面的程序中看到了一句沒有用的代碼,就是在MM類里的System.out.println("xxx");。沒有人關(guān)心基類MM是怎么看帥哥,因?yàn)樗皇且粋€(gè)模版,所以我們干脆就不要這句代碼,而且我們連{}也不要了,直接改寫這個(gè)方法為public abstract void toSeeGG();,那么這個(gè)方法稱做抽象方法(abstract method)。基類MM對我們來說沒有實(shí)現(xiàn)的必要,于是我們把class MM{...}改寫為abstract class MM{...},那么這個(gè)類叫做抽象類(abstract class)。我們不禁要問,那么抽象類能不能含有非抽象的函數(shù)呢。答曰:可以。但是這在實(shí)際中沒有什么用處,唯一用到的地方是:1,main()函數(shù),用來測試你的類;2,考試中。那么我們還要問,子類可以不覆寫父類中抽象方法行不行?答曰:假如子類也是abstract,那么可以,否則不行。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泰安市| 天门市| 民勤县| 泾源县| 瓦房店市| 启东市| 台州市| 邯郸县| 蒙自县| 五台县| 东莞市| 宁城县| 洛南县| 石嘴山市| 景东| 仪征市| 太谷县| 静乐县| 万源市| 九龙坡区| 监利县| 陆良县| 通许县| 墨江| 平山县| 铜梁县| 陇川县| 乐至县| 富源县| 石屏县| 麻江县| 大丰市| 兴隆县| 西乌珠穆沁旗| 固镇县| 延安市| 青阳县| 卫辉市| 卫辉市| 蒙自县| 台东市|