JAVA-內部類及匿名內部類解讀
阿新 • • 發佈:2019-01-30
package test10;
//無論內部類是公開還是私有都不能被繼承,因為它不是屬性,也不是方法。而是一個內部事務的描述。
public class Demo {
public static void main(String[] args) {
Pm p=new Pm(){//匿名內部類必須實現一個介面或者繼承一個類,必須重寫介面和類中的抽象方法
public void show() {
}
void fly(){
}
};
System.out.println(p.a);//引用能呼叫什麼,要看引用型別裡面有什麼
p.show();
// p.fly();編譯錯誤
Foo.Aoo FA=new Foo().new Aoo();//例項化成員內部類
FA.show();//呼叫成員內部類的方法
Pm.Inner PI=new Pm.Inner();//例項化介面內部類
Foo ff=new Foo();
ff.cop();
}
}
interface Pm {//介面
final int a=9;
void show();
class Inner {//介面內部類--預設是public static
}
}
class Foo {//外部類
private int a;
void cop(){
int A=3;
class Boo {//方法內部類--也可以直接訪問外部類的成員變數和方法
void kk(){}
void shoe() {
a=9;//可以寫成Foo.this.a=0;
cop();
System.out.println(A);//方法內部類能訪問被final區域性變數,
kk();
}
}
}
class Aoo {//成員內部類--可以直接訪問外部類的成員變數和方法
void show() {
a=0;//可以寫成Foo.this.a=0;
cop();//可以寫成Foo.this.cop();
}
}
static class Coo {
void sh() {
// cop();//不能訪問外部類的非靜態變數
}
}
}