外部類可以訪問內部類
你既然是用private修飾符,就是希望聲明的成員變數不被外部的類訪問,而實現封裝,那就要寫相應的get和set方法來實現對成員變數的修改和訪問!不然的話,你用public修飾,就應該不會報錯了,如果還報錯,就加上static關鍵字!應該就ok了!
『貳』 JAVA 中外部類可以訪問非靜態內部類的私有屬性
1、創建一個Bean1類,並建好兩個私有變數和構造方法。
『叄』 外部類可以直接調用內部類的方法嗎
1.使用static可以聲明一個內部類, 可以直接在外部調用 class Outer{ // 定義外部類 private static String info = "hello world" ; // 定義外部類的私有屬性 static class Inner{ // 使用static定義內部類為外部類 public void print(){ /
『肆』 外部類可以訪問內部類的私有變數嗎
不能直接訪問,可以寫個get()函數來取私有變數的值
『伍』 Java中,為什麼外部類可以訪問內部類的私有成員
本文通過反編譯內部類的位元組碼,說明了內部類是如何訪問外部類對象的成員的,除此之外,我們也對編譯器的行為有了一些了解,編譯器在編譯時會自動加上一些邏輯,這正是我們感覺困惑的原因。關於內部類如何訪問外部類的成員,分析之後其實
『陸』 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的東東,等你運行時自然你已經實例化一個對象了,自然也就可以訪問了~~~
『柒』 從外部如何訪問靜態內部類
一、外部類訪問內部類的成員需要創建內部類的對象,之後可以訪問內部類的任何成員,包括private成員,需要注意的是成員內部類不可以有靜態成員。
二、內部類不可以直接實例化,要通過外部類才可以,但是靜態成員要求系統默認初始化,所以會出現矛盾,解決的好辦法就是規定:成員內部類不可以有靜態成員,靜態初始化塊,靜態方法等。
三、在static方法(類載入時已經初始化)調用內部類的必須先創建外部類。
下面在說下嵌套類:如果你不需要內部類對象與其外圍類對象之間有聯系,那你可以將內部類聲明為static。這通常稱為嵌套類(nested
class)。想要理解static應用於內部類時的含義,你就必須記住,普通的內部類對象隱含地保存了一個引用,指向創建它的外圍類對象。然而,當內部
類是static的時,就不是這樣了。嵌套類意味著:
1. 要創建嵌套類的對象,並不需要其外圍類的對象。
2. 不能從嵌套類的對象中訪問非靜態的外圍類對象。
『捌』 外部類可以訪問內部類的方法以及靜態方法和數據域嗎
外部類,內部類,匿名類,外部類就是兩個類並列的class A {} class B {},內部類:class A { class B {}},B可以直接使用包涵它的類的成員變數,內部類不能被除包涵類以外的類調用;還有就是匿名類,也是內部類 classA{new {}}省略定義類名直接定義方法和使用,這個適用於代碼比較簡單且這個類不需要被其他類調用。
並且,外部類可以訪問內部類的方法以及靜態方法和數據域。
『玖』 Java外部類怎麼訪問內部類的方法和成員呢可以在外部類創建內部類的實例化對象嗎
是可以的,付代碼說明:
packagecom.demo;
publicclassMain{
publicstaticvoidmain(String[]args){
//非靜態內部類實例對象無法獨立存在,必須依賴於一個外部類的實例對象
//所以必須先實例化一個外部類對象
Demodemo=newDemo();
//因為非靜態內部類也是類的非靜態成員,所以可以用對象.來訪問
//下面用外部類對象.內部類構造器來創建內部類對象
Demo.InnerDemoinnerDemo=demo.newInnerDemo();
innerDemo.show();
}
}
/**
*一個外部類
*/
classDemo{
/**
*內部類,這里的內部類是非靜態的。
*
*實例化靜態內部類很簡單,直接類名.內部類名,這里不多說。
*/
publicclassInnerDemo{
/**
*內部類的一個方法
*/
publicvoidshow(){
System.out.println("這是一個內部類的方法");
}
}
}
『拾』 java中外部類可以訪問內部類嗎
一 對於外部類來說 內部類相當於它的一個屬性 內部類中的private也相當於它本身的private屬性 所以根據類內可見原則 內部類private是可以被外部類訪問的
二 你在主方法中直接new一個自身類 相當於是在聲明一個新的類 用這個新類去調用它的私有 你說是啥後果 對於jmv來說這就是典型的調用許可權失敗