黑馬程式設計師----java之內部類
阿新 • • 發佈:2018-12-26
---------------------- ASP.Net+Android+IO開發S、.Net培訓、期待與您交流! ----------------------
內部類可以存放在區域性位置上,
內部類在區域性位置上只能訪問區域性中被final修飾的區域性變數。
---------------------- ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ----------------------
今天學習了內部類,對學習作下筆記。
內部類訪問特點:
1.內部類可以直接訪問外部類中的成員。
2.外部類要訪問內部類,必須建立內部類的物件。
如果內部類是靜態的,相當於一個外部類.
如果內部類中定義了靜態成員,該內部類必須是靜態的
一般用於類的設計。
分析事物時,發現該事物描述中海油事物。而且這個事物還在訪問被描述事物的內容。
這時就是還有事物定義成內部類來描述。
class Outer { private int num=3; static class Inner { void show(){ System.out.println("show run..."+num); } static void function(){//如果內部類中定義了靜態成員,該內部類必須是靜態的 System.out.println("function run..."+num); } } publci void method(){ Inner in=new Inner(); in.show(); } } class InnerClassDemo { public static void main(String[] args) { //Outer o=new Outer(); //o.method(); //直接訪問外部類中的內部類中的成員。 //Outer.inner in=new Outer().new inner(); //in.show(); //如果內部類是靜態的,相當於一個外部類 // Outer.Inner in=new Outer.Inner(); // in.show(); //如果內部類是靜態的,成員是靜態的 Outer.Inner.function(); } }
為什麼內部類能直接訪問外部類中的成員呢?
那是因為內部類持有了外部類的引用。外部類名.this
class Outer { int num=3; class Inner { int num=4; void show(){ int num=5; System.out.println(num);//列印5,this.num列印4,Outer.this.num列印3 } } void method(){ new Inner().show(); } } class InnerClassDemo2 { public static void main(String[] args) { new Outer().method(); } }
內部類可以存放在區域性位置上,
內部類在區域性位置上只能訪問區域性中被final修飾的區域性變數。
class Outer
{
int num=3;
void method(){
final int num=9;//必須加final
class Inner
{
void show(){
System.out.println("show..."+num);
}
}
Inner in=new Inner();
in.show();
}
}
匿名內部類.就是內部類的簡寫格式。
必須有前提:
內部類必須繼承或者實現一個外部類或者介面。
匿名內部類:其實就是一個匿名子類物件。
abstract class Demo
{
abstract void show();
}
class Outer
{
int num=4;
/*
class Inner extends Demo
{
void show(){
System.out.println("show..."+num);
}
}
*/
public void method(){
//new Inner().show();
new Demo(){
void show(){
System.out.println("show...."+num);
}
}.show();//如果有匿名內部類有多個方法,則new一個父類物件,用父類物件呼叫。但是向上轉型了,注意不能訪問特有方法。
}
}
class Outer
{
void method(){
Object obj=new Object(){
public void show(){
System.out.println("show run");
}
};
obj.show();
//因為匿名內部類這個子類物件被向上轉型為了Object型別。
//這樣就不能在使用子類特有的方法了。
}
}
---------------------- ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ----------------------