黑馬程式設計師 Object和內部類

2021-06-26 09:53:22 字數 4826 閱讀 2040

一、object類

object類是層次類結構的根類,就是所有物件的直接父類或間接父類。裡面一定定義的所有物件的都具備的功能。這個是隱式的。就相當於:

class  demo extends  object

而extendsobject 其實是隱式的,但確實繼承了object類,並且具有類中的方法。檢視api文件,常用的方法有:

equals(object)方法,比較物件是否相等,其實是比較物件位址值是否相等。而且,這方法接收的是乙個object型別的物件,既然object是所有類的父類,那麼這裡就實現了多型。在我們應用的是,我們可以複寫其中的equals方法,進行我們想要進行的比較方法。複寫的是時候,注意的一點就是:接收的引數是object型別,不能改變,否則就不是複寫,所以當我們比較物件中特有資料時候,複寫中還要加上一些判斷和型別向下轉型的動作。

tostring()方法,返回該物件的字串形式。

getclass()方法,這方法在反射時常用。返回此object執行時的類,注意是類。返回值為class。重點說下這個方法,首先我們建立物件時會載入相關的類檔案,而類檔案裡面有關於食物的具體描述,比如說名稱、方法和功能,而這類class檔案在硬碟裡是乙個個實實在在的個體,可以把這些檔案看做是物件,那麼以物件導向的概念來說,這些class檔案就會有乙個類來描述它,這個類就是class,只是名字起為class。

當我們使用getclass方法時,就返回了乙個型別為class的引用,程式如下:

class  c  = 物件.getclass();

這就把物件相對應的class型別返回了,我的理解是,把描述這個物件的類檔案整體返回了,有了這個物件的類檔案,通過引用c,我們就可以獲取這個類的名字,方法,引數等等。

而class這個類中還有好多方法,比如getname(),就可以返回這個類的名字。

不部分一定要了解,熟悉。

我們再返回來看tostring(),它就是返回物件的類名加上雜湊值。其中的程式為:

d.getclass().getname()+」@」+integer.tohexstring(d.hashcode())

當然tostring方法也是可以複寫的,寫成我們想要的方法。

總結來說:

1)object類是所有類的父類。所以object的引用可以接受其他任何子類物件,這裡就是多型。

2)其他類是隱式繼承object類,具有object了方法 3)

複寫object的方法時,要注意如果使用子類特有方法,要向下轉型,必要時要做一些判斷。比如euqals()方法的複寫。 4)

重點理解getclass()方法,這對後期學習反射來說挺重要

二、內部類

定義上,將乙個類定義在另乙個類裡面,對裡面那個類就稱為內部類。

格式來說:

class a }

這裡b類就是內部類。

既然內部類在外部類裡面,就相當於乙個外部類中的乙個成員,所以就內部類就可以直接訪問外部類成員,私有的成員也是可以訪問的。而外部類缺不能直接訪問內部類的成員,必須先建立內部類物件才可以訪問。

方式一,建立內部類物件,訪問內部類成員,程式為:

classouter }

voidmethod() }

之後只要在主函式中建立outer的物件,呼叫method方法即可。

方式二,直接在主方法中訪問內部類成員。程式為:

在主函式中:

outer.inner  in = new outer().newinner();

in.function(); //直接呼叫內部類成員

這裡原因是因為內部類依存於外部類,所以要前面表示是外部類,也就是相當於內部類的乙個成員。這樣,內部類就可以被private修飾,成員麼,就可以修飾的。

個人理解來看,內部類也是乙個類,但是給他上了乙個標籤,做好多事都得呆著這標籤。

總結來說:

1)內部類可以直接訪問外部類中的成員,包括私有成員 2)

之所以可以直接訪問外部類中的成員,因為內部類中持有乙個外部類的引用 3)

外部類要訪問內部類,必須建立內部類物件 4)

當內部類定義在外部類成員位置上,而且不是私有的,就可以再主函式中直接建立內部類物件,格式就是方式二 5)

當內部類在成員位置上,就可以被成員修飾符修飾,比如private修飾符修飾。 6)

當內部類被static修飾時,就成靜態內部類,這時內部類只能直接訪問外部類中的static成員

外部其他類,訪問static內部類的非靜態成員

new outer.inner().function();

外部其他類,訪問static內部類的靜態成員

user.inner.function();

以上兩個實際開發中用的都比較少。 7)

注意:當內部類定義了static成員,內部類也必須是靜態的 8)

當外部類的靜態方法訪問內部類時,內部類也必須是static的

三、內部類定義原則

類是描述現實中事物,當描述事物時,事物的內部還有事物,該事物用內部類來描述,因為內部事物在只用外部事物的內容。

就比如描述電腦,而電腦裡有顯示器,鍵盤,而它們各有各的功能屬性和行為,但是這兩個又和電腦本身有聯絡,所以按照現實生活聯絡來說,這樣就可以定義內部類,這樣是最優的。

四、匿名內部類(常用)

1、內部類定義在區域性中

內部類可以定義在外部類中的成員部分或者區域性部分。如果內部類放在區域性的時候,要在區域性建立內部類物件並呼叫內部類裡的方法時,物件建立要在內部類語句後面。具體程式為:

class outer

} newinner().function();//建立物件語句必須在內部類之後}

} 需要注意的是:1)內部類定義在區域性時,不可以被成員修飾符修飾

2)內部類定義在區域性時,可以直接訪問外部類成員,因為持有外部類中的引用

3)內部類定義在區域性時,不可以訪問它所在的區域性中的變數,只能訪問被final修飾的區域性變數。

就上上述程式中,method方法中如果加入乙個區域性變數,或者加入引用引數(也就是區域性變數),那麼想要內部類引用的話,就要加上final。程式如下:

voidmethod(finalint x ) }

newinner().function(); }

2、匿名內部類

匿名內部類其實就是內部類的簡寫格式

先看一段程式:

classouter }

voidmethod() }

inner為內部類,我們想要的是乙個匿名的內部類,那這類類就沒有名字:

class

那麼這個內部類既然沒有名字,那麼在外部類就無法建立其物件,這就涉及到匿名內部類定義的前提內部類必須是繼承乙個類或者實現介面。

有這樣乙個前提,那麼就可以通過多型,即父類或介面的引用來指向物件,把斜體的部分:

classouter

}

voidmethod() }

改為如下程式:

voidmethod()

}

}

}這就是匿名內部類的寫法,這就是上面的斜的部分的簡寫,這是乙個物件,是乙個子類的物件。既然這就是乙個物件,那麼在大括號最後可以加.fucntion();   進行方法呼叫,程式如下:newadvice()

}.function();

個人認為,就是內部類繼承乙個類或實現乙個介面時,我們引用內部類時,直接在方法中建立匿名內部類,相當於介面引用後直接在內部寫入內部類實現的功能即可,這就是乙個大的物件,這個物件就是內部類的物件,就可以用多型給他起名字然後按照物件的方法呼叫其中的方法即可。

總結來說:1)

匿名內部類時內部類的簡寫格式 2)

定義匿名內部類的前提:內部類必須繼承乙個類或實現介面 3)

匿名內部類格式:new 父類或幾口( )

4)匿名內部類其實就是乙個匿名的子類物件(就是那個內部類的物件),只是少名字,加入內部類的內容,本質上還是乙個物件,而且是子類物件。 5)

匿名內部類中定義的方法最好是一到兩個

6)

匿名內部類可以作為引數傳遞,這樣方便很多,之後用到會很多

就是說,我的乙個方法method(inte***ce in),要傳入乙個介面型別的物件,那麼通常的方法就是建立乙個類,這個類實現這個介面的方法,然後利用多型傳入這個類的物件。現在有了匿名內部類,就可以直接建立匿名內部類傳入,具體程式為:

public static void show ( new advice()

}

);

注意:即便是內部類中沒有繼承一類或實現介面,但是它有父類object,同樣可以建立匿名內部類。

黑馬程式設計師 物件導向 Object與內部類

1 object 是所有類直接或間接的父類,該類中具備所有物件都具備的功能。2 內部類 將以各類定義在另乙個類裡面,內部的類就叫做內部類。內部類的訪問規則 內部類可以直接訪問外部類中的成員,包括私有。外部類要訪問內部類,必須建立內部類的物件。內部類之所以可以直接訪問外部類中的成員,因為內部類中有乙個...

黑馬程式設計師 內部類

windows phone 7手機開發 net培訓 期待與您交流!什麼是內部類呢?將乙個類定義在另乙個類的裡面,對裡面那個類就稱為內部類 內建類 巢狀類 內部類的訪問特點有哪些呢?內部類可以直接訪問外部類中的成員,包括私有成員 而外部類要訪問內部類中的成員必須要建立內部類的物件。內部類有什麼作用呢?...

黑馬程式設計師 內部類

asp.net android io開發s net培訓 期待與您交流!內部類即在乙個外部類的內部再定義乙個類。內部類作為外部類的乙個成員,且依附於外部類而存在。內部類的訪問規則 1 內部類可以直接訪問外部類中的成員,包括私有。2 外部類需要訪問內部類時,必須建立內部類物件。訪問格式 外部類名.內部類...