 Java中內部(bu)類的幾種表現形式(shi)
							時間:2018-09-25      來源:未(wei)知
							Java中內部(bu)類的幾種表現形式(shi)
							時間:2018-09-25      來源:未(wei)知 
							Java中內(nei)部類的幾種表現形式:
1. 一般內部類
一般特征:
內(nei)部(bu)類(lei)(lei)可以訪(fang)問外部(bu)類(lei)(lei)的屬性(包(bao)括(kuo)私(si)有),
但是外部類(lei)(lei)(封裝類(lei)(lei)、內嵌類(lei)(lei))不能訪(fang)問內部類(lei)(lei)的屬性。
表現形式:
public class Out {
int i = 10;
class Inner{
int i = 20;
void show(int i){
System.out.println(Out.this.i+":"+this.i+":"+i);
}
}
}
調用方式:
// 實例化內部類的(de)第一種形式.
Out.Inner oi = new Out().new Inner();
oi.show(30);
// 實(shi)例化內部類的第二種形式(shi).
Out o = new Out();
Out.Inner oi1 = o.new Inner();
oi1.show(40);
}
2. 私有內部類
特性:
只(zhi)能(neng)在本類當中去(qu)實例化(hua)內部類,并調用其成員。
表現形式:
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 可(ke)以聲明(ming)為static的,但此時就不能(neng)再使用外層封裝類的非static的成員(yuan)變量;
2.非static的內部(bu)類(lei)中(zhong)(zhong)的成(cheng)員(yuan)不能聲(sheng)明(ming)為static的,只有在頂層(ceng)類(lei)或static的內部(bu)類(lei)中(zhong)(zhong) 才可聲(sheng)明(ming)static成(cheng)員(yuan)
表現形式:
public class Out {
static int i = 10;
static class Inner{
static int j = 90;
void show(){
System.out.println(i+"旺財又來了"+j);
}
}
}
調用方式:
//這個是實例(li)化靜態內部類的方法。
Out.Inner oi = new Out.Inner();
oi.show();
4. 匿名內部類
首先說(shuo)下匿名內部類的幾(ji)個使用原則(ze):
匿名內部類不能(neng)有(you)構造(zao)方法(fa);
匿名(ming)內(nei)部類(lei)不能(neng)定義任何的(de)靜態成員、方法和類(lei);
匿名內部類不能(neng)是public、protected、private、static;
只能創建匿(ni)名內部類(lei)的一個實例;
一(yi)個匿(ni)名內部類(lei)一(yi)定是在new的后面,用其隱(yin)含實(shi)現一(yi)個接口(kou)或實(shi)現一(yi)個類(lei);
因匿名內部(bu)類為局部(bu)內部(bu)類,所以局部(bu)內部(bu)類的所有限制對其(qi)都生效(xiao)。
我寫一個匿(ni)名內部類的(de)常用的(de)形式:
第一步:定義一個接口(kou):
public interface DemoInt {
public abstract void dosomething();
}
第二(er)步:定(ding)義一個類:
public class Demo {
void show(DemoInt d){
d.dosomething();
}
}
第三步(bu):定(ding)義一個測試類(lei)(一般寫(xie)法(fa)):
public class Test {
public static void main(String[] args) {
Demo d = new Demo();
A a = new A();
// DemoInt a = new A(); 多態形式(shi)
d.show(a);
}
}
class A implements DemoInt{
@Override
public void dosomething() {
System.out.println("匿名內部類");
}
}
定義一個測試類(采用匿(ni)名內部(bu)類的寫法):
public class Test {
public static void main(String[] args) {
Demo d = new Demo();
d.show(new DemoInt() {
@Override
public void dosomething() {
System.out.println("匿(ni)名內部類");
}
});
}
}