當前位置:首頁 » 編程語言 » java外部類訪問內部類

java外部類訪問內部類

發布時間: 2023-02-23 08:11:50

java:關於外部類訪問內部類成員的問題

\\外部類對象可以直接訪問內部類對象的成員變數和方法
你使用的這個方法的旨意是用非靜態的外部類實例化一個內部類對象,外部類能夠訪問成員內部類的成員變數和方法的唯一途徑就是通過實例化一個外部類的對象,然後這個對象通過 對象.makeInner()來new一個Inner in,此過程調用了Inner()這個內部類的構造函數。
其實你只是把順序搞錯了,編譯時不回去運行你的函數方法,也就是代碼中:
public void makeInner(){
Inner in = new Inner();
in.seeOuter();
}
這個越權的函數並未去執行訪問其所在類的內部類的成員函數:Inner();
且Outer並不是static,所以其只能實例化一個對象,然後對象.makeInner();這時處於運行時,此類的對象可以調用此類的內部類的成員方法和成員變數,自然可以調用Inner();
說的簡單點:你使用makeInner()時一定是實例化一個Outer的對象了,不然你無法調用makeInner,對吧,運行makeInner時他一定是在Outer這個類的對象下運行的,Outer的對象是可以訪問其內部類Inner的變數和方法的。所以說:makeInner()運行時你絕對已經創建了一個Outer的對象了。是這個對象的makeInner()在運行,而這個Outer的這個對象是可以訪問Outer的內部類Inner的變數和方法的。編譯並非運行,編譯時Outer沒有實例化對象,但makeInner()也沒被調用運行,所以他編譯時沒有去訪問內部類Inner的東東,等你運行時自然你已經實例化一個對象了,自然也就可以訪問了~~~

Ⅱ Java中,為什麼外部類可以訪問內部類的私有成員

本文通過反編譯內部類的位元組碼,說明了內部類是如何訪問外部類對象的成員的,除此之外,我們也對編譯器的行為有了一些了解,編譯器在編譯時會自動加上一些邏輯,這正是我們感覺困惑的原因。關於內部類如何訪問外部類的成員,分析之後其實

Ⅲ Java外部類怎麼訪問內部類的方法和成員呢可以在外部類創建內部類的實例化對象嗎

是可以的,付代碼說明:

packagecom.demo;

publicclassMain{

publicstaticvoidmain(String[]args){

//非靜態內部類實例對象無法獨立存在,必須依賴於一個外部類的實例對象
//所以必須先實例化一個外部類對象
Demodemo=newDemo();

//因為非靜態內部類也是類的非靜態成員,所以可以用對象.來訪問
//下面用外部類對象.內部類構造器來創建內部類對象
Demo.InnerDemoinnerDemo=demo.newInnerDemo();

innerDemo.show();
}

}

/**
*一個外部類
*/
classDemo{

/**
*內部類,這里的內部類是非靜態的。
*
*實例化靜態內部類很簡單,直接類名.內部類名,這里不多說。
*/
publicclassInnerDemo{

/**
*內部類的一個方法
*/
publicvoidshow(){
System.out.println("這是一個內部類的方法");
}

}

}

Ⅳ java外部類怎麼調用內部類的方法

首先,你要搞清楚靜態方法跟非靜態方法的區別:

非靜態方法是跟隨著類的生命周期的,當類實例化時,非靜態方法跟隨著實例化對象產生,實例化對象可以調用類中的非靜態方法,當實例化對象結束時,非靜態方法也跟著結束。就是說,非靜態方法是依附於實例化對象的,它的生命周期就是實例化對象的生命周期。

靜態方法是不受制於類的實例化對象的,即靜態方法從程序開始運行到最後釋放內存結束是一直存在的,它的生命周期就是程序的生命周期。

從以上可知,靜態方法調用非靜態方法會造成一個問題,就是生命周期的不一致,比如說:程序剛剛開始運行時,類的實例化構造函數還沒有執行,這時靜態方法是調用不了非靜態方法的;或者當實例化對象消亡之後,靜態方法也是不能夠去調用非靜態方法的。

靜態方法要想調用非靜態方法,必須要通過實例化對象去調用;當然也可以把非靜態方法變成靜態方法,這樣就不存在任何障礙了。

希望我的回答對你能夠有所幫助。

Ⅳ Java在外界如何調用局部內部類

  1. 內部類和成員變數一樣,通過外部類的實例調用內部類。

  2. 可以先創建外部類實例。

  3. 用外部類實例調用內部類構造方法創建內部類實例。

  4. 再用這個內部類實例調用內部類成員方法。

Aa=newA();
A.Bb=a.newB();
b.do1();//do是關鍵字,所以這里在do後面加了個1,否則無法編譯。

Ⅵ java外部類怎樣調用內部類方法

你這裡面有兩個錯:
1、Leis內部類是非靜態類,不能在靜態方法里初始化,即第三行Leis x=new Leis();報錯,可以把Leis類改成靜態類,即
public static class Leis{
......
}

2、Leis()是Leis類的構造函數,不能在第4行x.Leis()顯示調用

一句話:靜態方法里不能訪問非靜態內部類。但你可以在外部類的一個成員方法里訪問非靜態內部類,然後你再在靜態方法里初始化外部類,通過外部類來訪問非靜態內部類。

Ⅶ java 外部類可以訪問內部類private問題

你既然是用private修飾符,就是希望聲明的成員變數不被外部的類訪問,而實現封裝,那就要寫相應的get和set方法來實現對成員變數的修改和訪問!不然的話,你用public修飾,就應該不會報錯了,如果還報錯,就加上static關鍵字!應該就ok了!

Ⅷ java 內部類 能被外部使用嗎

1、內部類是指在一個外部類的內部再定義一個類。類名不需要和文件夾相同。
2、內部類可以是靜態static的,也可用public,default,protected和private修飾。(而外部頂級類即類名和文件名相同的只能使用public和default)。
3、內部類是一個編譯時的概念,一旦編譯成功,就會成為完全不同的兩類。對於一個名為outer的外部類和其內部定義的名為inner的內部類。編譯完成後出現outer.class和outer$inner.class兩類。 所以內部類的成員變數/方法名可以和外部類的相同。
4、內部類具有:成員內部類、局部內部類、嵌套內部類、匿名內部類。
以下以成員內部類示例:
成員內部類,就是作為外部類的成員,可以直接使用外部類的所有成員和方法,即使是private的。同時外部類要訪問內部類的所有成員變數/方法,則需要通過內部類的對象來獲取。
要注意的是,成員內部類不能含有static的變數和方法。 因為成員內部類需要先創建了外部類,才能創建它自己的 ,了解這一點,就可以明白更多事情,在此省略更多的細節了。
在成員內部類要引用外部類對象時,使用outer.this來表示外部類對象;
而需要創建內部類對象,可以使用outer.inner obj = outerobj.new inner();
示例代碼:
public class Outer {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer. new Inner();
inner.print( "Outer.new" );
inner = outer.getInner();
inner.print( "Outer.get" );
}
public Inner getInner() {
return new Inner();
}
public class Inner {
public void print(String str) {
System.out.println(str);
}
}
}

熱點內容
藍鷗php培訓 發布:2024-11-08 02:56:29 瀏覽:652
電腦配置xp是什麼意思 發布:2024-11-08 02:56:27 瀏覽:339
軟體自帶伺服器地址怎麼辦 發布:2024-11-08 02:55:45 瀏覽:577
幸福密碼電視劇講述了什麼 發布:2024-11-08 02:55:40 瀏覽:425
win7文件夾看不到文件 發布:2024-11-08 02:55:37 瀏覽:666
蘋果安卓戰力哪個高 發布:2024-11-08 02:45:04 瀏覽:532
安卓備份哪個系統好 發布:2024-11-08 02:35:50 瀏覽:736
unlinklinux 發布:2024-11-08 02:31:30 瀏覽:663
nginxphp編譯 發布:2024-11-08 02:11:57 瀏覽:979
粉筆手機號注冊的密碼是什麼 發布:2024-11-08 02:01:49 瀏覽:249