Java中內部類的幾種表現形式:
1. 一般內部類
一般特征:
內部類可以訪問外部類的屬性(包括私有),
但是外部類(封裝類、內嵌類)不能訪問內部類的屬性。
表現形式:
public class Out {
int i = 10;
class Inner{
int i = 20;
void show(int i){
System.out.println(Out.this.i+":"+this.i+":"+i);
}
}
}
調用方式:
// 實例化內部類的第一種形式.
Out.Inner oi = new Out().new Inner();
oi.show(30);
// 實例化內部類的第二種形式.
Out o = new Out();
Out.Inner oi1 = o.new Inner();
oi1.show(40);
}
2. 私有內部類
特性:
只能在本類當中去實例化內部類,并調用其成員。
表現形式:
public class Out {
private class Inner{
void show(){
System.out.println("旺財");
}
}
void method(){
Inner i = new Inner();
i.show();
}
}
調用方式:
Out o = new Out();
o.method();
3. 靜態內部類
特性:
1.Inner class 可以聲明為static的,但此時就不能再使用外層封裝類的非static的成員變量;
2.非static的內部類中的成員不能聲明為static的,只有在頂層類或static的內部類中 才可聲明static成員
表現形式:
public class Out {
static int i = 10;
static class Inner{
static int j = 90;
void show(){
System.out.println(i+"旺財又來了"+j);
}
}
}
調用方式:
//這個是實例化靜態內部類的方法。
Out.Inner oi = new Out.Inner();
oi.show();
4. 匿名內部類
首先說下匿名內部類的幾個使用原則:
匿名內部類不能有構造方法;
匿名內部類不能定義任何的靜態成員、方法和類;
匿名內部類不能是public、protected、private、static;
只能創建匿名內部類的一個實例;
一個匿名內部類一定是在new的后面,用其隱含實現一個接口或實現一個類;
因匿名內部類為局部內部類,所以局部內部類的所有限制對其都生效。
我寫一個匿名內部類的常用的形式:
第一步:定義一個接口:
public interface DemoInt {
public abstract void dosomething();
}
第二步:定義一個類:
public class Demo {
void show(DemoInt d){
d.dosomething();
}
}
第三步:定義一個測試類(一般寫法):
public class Test {
public static void main(String[] args) {
Demo d = new Demo();
A a = new A();
// DemoInt a = new A(); 多態形式
d.show(a);
}
}
class A implements DemoInt{
@Override
public void dosomething() {
System.out.println("匿名內部類");
}
}
定義一個測試類(采用匿名內部類的寫法):
public class Test {
public static void main(String[] args) {
Demo d = new Demo();
d.show(new DemoInt() {
@Override
public void dosomething() {
System.out.println("匿名內部類");
}
});
}
}