關於Java內部類的初始化
阿新 • • 發佈:2018-12-26
Java類的位置
1、在同個Java檔案中,但不是內部類
public class Test {
}
class T{
}
- 這裡的T不是內部類,只是在Test.java檔案的內部而已。
- T 的修飾符只允許使用“public”、“abstract”和“final”。
- T的例項化過程和主類沒有區別
T t = new T();
就可以,在本Java檔案和其他Java檔案都是這樣例項化。但是要注意,由於沒有許可權修飾符是預設包訪問許可權,所以只能在包內例項化。
2、常規內部類
public class Outter{
class Inner {}
public void fun(){
Inner in = new Inner();
}
public void fun2(){
Outter out = new Outter();
Outter.Inner in = out.new Inner();
Outter.Inner in2 = new Outter().new Inner();
}
}
要例項化內部類物件,必須先有外部類物件,通過外部類物件.new 內部類();來例項化內部類物件,在其他檔案或者其他包內都是這樣,只是要能在其他包例項化的話,內部類Inner還得加上修飾符public。
3、靜態內部類
class Outter {
private static int age = 12;
static class Inner {
public void print() {
System.out.println(age);
}
}
}
public class test1 {
public static void main(String[] args) {
Outter.Inner in = new Outter.Inner();
in.print();
}
}
例項化靜態內部類和例項化常規內部類有類似的地方,而不同之處在與靜態內部類由於是靜態的,所以不需要外部類物件就可以例項化,如上例Outter.Inner in = new Outter.Inner();
在其他Java檔案也是這麼例項化的。
4、區域性內部類
public class A {
class B {
}
public void pint() {
class C {
}
new C();
}
public void pint(boolean b) {
if (b) {
class D {
}
new D();
}
}
}
區域性內部類是定義在一個方法或者一個作用域裡面的類,它和成員內部類的區別在於區域性內部類的訪問僅限於方法內或者該作用域內,所以只能在方法或者該作用域內例項化。
5、匿名內部類
new ClassOrInterfaceName(){
/*類體*/ }
匿名內部類可以繼承一個類或實現一個介面,這裡的ClassOrInterfaceName是匿名內部類所繼承的類名或實現的介面名。但匿名內部類不能同時實現一個介面和繼承一個類,也不能實現多個介面。如果實現了一個介面,該類是Object類的直接子類,匿名類繼承一個類或實現一個介面,不需要extends和implements關鍵字。