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