導航:首頁 > 編程語言 > java外部類訪問內部類

java外部類訪問內部類

發布時間:2023-03-08 01:13:57

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);
}
}
}

Ⅲ 為什麼JAVA中外部類不能直接訪問靜態內部類的成員

一、外部類訪問內部類的成員需要創建內部類的對象,之後可以訪問內部類的任何成員,包括private成員,需要注意的是成員內部類不可以有靜態成員。

二、內部類不可以直接實例化,要通過外部類才OK,但是靜態東東要求系統默認初始化,所以矛盾就出現了,解決的好辦法就是規定:成員內部類不可以有靜態成員,靜態初始化塊,靜態方法等

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

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

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

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

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

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

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

是可以的,付代碼說明:

packagecom.demo;

publicclassMain{

publicstaticvoidmain(String[]args){

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

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

innerDemo.show();
}

}

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

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

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

}

}

Ⅵ 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外部類訪問內部類相關的資料

熱點內容
大數據與工業的結合包括哪些領域 瀏覽:993
蘋果7鬧鍾鈴聲設置歌曲 瀏覽:168
法庭文件有哪些 瀏覽:211
zip文件怎麼刪除嗎 瀏覽:247
win1016179安裝失敗 瀏覽:457
pp助手的文件系統 瀏覽:218
設計網站橫幅廣告要哪些因素 瀏覽:991
勞務報酬認定在多少號文件 瀏覽:209
本地數據傳輸業務有什麼用途 瀏覽:375
什麼情侶app好用 瀏覽:575
旅遊攻略適合下什麼app 瀏覽:403
nodejsbusboy下載 瀏覽:106
同事不會送文件找不到地方 瀏覽:473
銀聯萬事達applepay 瀏覽:834
試玩怎麼推廣app 瀏覽:588
課設報告中數據結構寫什麼東西 瀏覽:44
男生怎麼搜到網站的 瀏覽:441
當前無網路怎麼解決 瀏覽:299
x200thinkpad升級 瀏覽:568
華為mate8幾個版本的區別 瀏覽:582

友情鏈接