JavaSE學習筆記 內部類

2021-05-31 22:01:12 字數 1911 閱讀 8731

一,什麼是內部類?

將類定義在類中,該類就是類部類.

二,訪問許可權.

內部類可以直接訪問外部類中的成員。

外部類想要訪問內部類,需要建立內部類物件。

三,什麼時候使用內部類。

有a類和b類,當a類想要直接訪問b類中的成員,而b類又需要建立a類的物件來訪問a類中的成員。這時,就將a類定義成b類的內部類。

例子:孫悟空和牛魔王老婆

什麼時候定義內部類呢?

當分析乙個事物時,該事物的內部還有具體的事物,這個具體的事物在使用該事物中的其他成員。

這時就將這個具體的事物用內部類來描述。

比如人體是乙個類,人體有心臟,心臟的功能在直接訪問人體的其他內容。這時就將心臟定義在人體類中,作為內部類存在。

而且內部類通常都不會直接對外提供,都會封裝到外部類中,外部類一般會通過對外提供方法的形式對其進行訪問

記住只有內部類定義在成員位置上,才可以有這些成員修飾符。

class body

public heart getheart()

}class main

四, 內部類使用:在外部使用,必須標示出是哪個類的內部類.  格式:外部類名.內部類名 變數=new 外部類物件.內部類物件

例:outer.inner in = new outer().inner();

但是一般不會這麼用,因為內部類都會被外部類隱藏,通常都是外部類提供方法獲取內部類的物件。

這樣可以對獲取物件可控。通常內部類都會被private私有化。

五,靜態的情況:

當內部類中如果有靜態成員時,該內部類也必須是靜態的。

而靜態內部類只能訪問外部類中的靜態成員。

在執行static內部列方法時,兩種情況。

1,內部類靜態,但是方法沒靜態。

該方法需要被物件呼叫執行。

outer.inner in = new outer.inner();//產生了乙個靜態內部類物件。

in.show();

2,內部類靜態,而且方法也是靜態的。

靜態內部類隨著類檔案的載入就已經存在了,靜態方法隨著內部類的載入也存在了。

這時是不需要物件的。

outer.inner.show();

六,內部類訪問外部類成員細節

記住只有內部類定義在成員位置上,才可以有這些成員修飾符。!!!!!

非靜態的內部類之所以可以直接訪問外部類中的成員,

那是因為內部類中都持有乙個外部類物件引用:外部類名.this

靜態的內部類之所以可以直接訪問外部類中的靜態成員,其實持有的是外部類名。

記住只有內部類定義在成員位置上,才可以有這些成員修飾符。

例子:class outer

}static class inner2

}public static void method2()

public void method()

}七,內部類定義在區域性位置上

記住只有內部類定義在成員位置上,才可以有這些成員修飾符。!!!

區域性內部類不能被修飾符修飾

內部類定義區域性位置上,只能訪問該區域性中的被final修飾的常量

例子:class outer

public void  method(final int y)

}new inner().show();}}

class innerclassdemo4

}八,匿名內部類

格式:匿名內部類的格式:

new 父類名或者介面()

匿名內部類其實就是乙個子類匿名物件。這是乙個帶有內容的物件,這個物件有點胖。

例子:bstract class absdemo

class outer}*/

public void method()

}.show();}}

class  niminginnerdemo

}

JAVASE 學習筆記 內部類

內部類 在乙個類的內部定義另外乙個類,另外乙個類稱為內部類 內部類的class檔名 外部類 內部類.class 內部類的型別 成員內部類 在外部類的成員位置 區域性內部類 在外部類的區域性位置 內部類的好處 可以直接訪問外部類的所有成員 應用場景 在描述a事物時,a事物內部還維護了另外乙個b事物,且...

JavaSE基礎學筆記 內部類

內部類的應用場景 當描述事物時,事物的內部還有事物,並且這個內部事物要使用外部事物的某些特性,這時把內部事物定義成內部類。內部類與其外部類的訪問規則 1.內部類可以直接訪問外部類的成員。2.外部類要訪問內部類要建立內部類物件。3.內部類可以被private修飾,因為內部類是在其外部類的成員位置上。注...

JavaSE基礎08內部類

在乙個類中定義乙個類,那麼把這種情況稱為內部類。內部類可以訪問外部類的成員,即使外部類用private修飾 私有 外部類想要訪問內部類成員,必須同通過建立內部類物件來訪問內部類的成員。package org.zst.inter class outer1 public void show public...