靜態內部類與非靜態內部類之間的訪問


package cn.hncu.day3.inner;

public class Outer {
private int size;

public void aa(){
size++;
System.out.println(size);
}
public void bb(){
//共用this對象,不需要另外再new一個Outer對象去調用aa()
aa(); //相當於this.aa();
}

//非靜態的內部類1---演示一個非靜態內部類的基本用法
//可理解為外部類的一個成員,跟一個方法一樣(包括傳參)---對象級
public class Inner{
private int counter=10;
private int size=5;//內部類可以隱藏外部類的成員變量
public void doSth(){
size++;//可以訪問外部類的成員變量,即使private的也可以---其實跟函數一樣
System.out.println(size);

//外部類的size被隱藏了,如果一定要訪問,那么可采用下面的方式
//this.size是內部類的, 而Outer.this.size是外部類的
System.out.println( Outer.this.size );
}
}

//非靜態的內部類2----i.演示非靜態兄弟內部類之間的訪問方式---對象級
public class Inner2{
public void doSth(){
//不用外部類對象,因為共用this對象
Inner in = new Inner();//相當於 this.new Inner()
System.out.println( in.counter );//可以訪問兄弟內部類中的私有成員

//iv.在非靜態內部類中訪問 靜態兄弟內部類
Inner3 in3 = new Inner3();
in3.doSth();

}

class A{
private int a=5;
}
}

//靜態內部類---跟靜態方法的用法非常類似---類級
//iii.在靜態內部類中訪問非靜態內部類
//private
public static class Inner3{
int num=10;
public void doSth(){
Outer out = new Outer();
Inner in = out.new Inner();
in.doSth();
}
public static void fun(){
System.out.println("aaaaaa");
}
}
//ii.在靜態內部類中訪問兄弟靜態內部類
private static class Inner4{
int num=10;
public void doSth(){
Inner3 in = new Inner3();
in.doSth();
}
}

public static void main(String[] args) {
Outer out = new Outer();
out.aa();

//非靜態內部類,要用“外部類的對象.new”的方式構造內部類對象
Inner in = out.new Inner();
in.doSth();

Inner2 in2 = out.new Inner2();
in2.doSth();
}


}

-----------------------------------------------------------------------

package cn.hncu.day3.inner;

public class Outer2 {

//對於其它類來說,要訪問一個靜態或非靜態內部類,靜態與非靜態方法,規則是一樣的
public void aa(){
//2訪問另一個類中的靜態內部類
Outer.Inner3.fun();//靜態方法
Outer.Inner3 in = new Outer.Inner3();
in.doSth();

//3訪問另一個類中的非靜態內部類
Outer out = new Outer();
Outer.Inner in2 = out.new Inner();
in2.doSth();
}

public static void main(String[] args) {
//1 注意: 私有的內部類是不能被其它外部類訪問的
//Outer.Inner4 in0 = new Outer.Inner4();//ERROR

//2訪問另一個類中的靜態內部類
Outer.Inner3.fun();//靜態方法
Outer.Inner3 in = new Outer.Inner3();
in.doSth();

//3訪問另一個類中的非靜態內部類
Outer out = new Outer();
Outer.Inner in2 = out.new Inner();
in2.doSth();

}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM