java內部類調用外部類
Ⅰ java 內部類如何被外部類調用
首先,你要搞清楚靜態方法跟非靜態方法的區別:
非靜態方法是跟隨著類的生命周期的,當類實例化時,非靜態方法跟隨著實例化對象產生,實例化對象可以調用類中的非靜態方法,當實例化對象結束時,非靜態方法也跟著結束。就是說,非靜態方法是依附於實例化對象的,它的生命周期就是實例化對象的生命周期。
靜態方法是不受制於類的實例化對象的,即靜態方法從程序開始運行到最後釋放內存結束是一直存在的,它的生命周期就是程序的生命周期。
從以上可知,靜態方法調用非靜態方法會造成一個問題,就是生命周期的不一致,比如說:程序剛剛開始運行時,類的實例化構造函數還沒有執行,這時靜態方法是調用不了非靜態方法的;或者當實例化對象消亡之後,靜態方法也是不能夠去調用非靜態方法的。
靜態方法要想調用非靜態方法,必須要通過實例化對象去調用;當然也可以把非靜態方法變成靜態方法,這樣就不存在任何障礙了。
希望我的回答對你能夠有所幫助。
Ⅱ JAVA匿名內部類怎麼調用外部類的方法
並不清楚樓主代碼需要如何實現。簡短例子供參照,如有疑問可追問
publicclass${
空耐兆publicstaticvoidmain(String[]args){
finalAa1=new畝脊A();
Aa=newA(newB(){
@Override
publicvoidtoDo(){
a1.getB();//調用final對象
A.test();//或嘗試調用靜態方法
//a.getB();//錯誤,a未完成初始化,無法斗租被使用
}
});
}
}
classA{
Bb;
A(){}
A(Bb){
this.b=b;
}
staticvoidtest(){
}
publicBgetB(){
returnthis.b;
}
}
interfaceB{
publicvoidtoDo();
}
Ⅲ java 用內部類調用外部類的方法修改外部類的內容
將JLabel定義為外部類的成檔坦賣員變數
內部類 只能訪問外信亮部類成員變數或 局部final類變行逗量
Ⅳ 深入理解Java中為什麼內部類可以訪問外部類的成員
一般來說,外部類調用內部類的方法分為以下幾種情況:
1.使用static可以聲明一個內部類, 可以直接在外部調用
// 定義外部類
class Outer
{
// 定義外部類的私有屬性
private static String info = "hello world";
// 使用static定義內部類
static class Inner
{
// 定義內部類的方法
public void print()
{
// 直接訪問外部類的私有屬性
System.out.println(info);
}
}
// 定義外部類的方法
public void fun()
{
// 通過內部類的實例化對象調用方法
new Inner().print();
}
}
public class InnerClassDemo03
{
public static void main(String args[])
{
// 通過Outer.Inner創建內部類的實例,並調用它的print方法
new Outer.Inner().print() ;
}
}
2.不使用statc聲明一個內部類 ,使外部調用
//定義外部類
class Outer
{
//定義外部類的私有屬性
private String info = "hello world";
//定義內部類
class Inner
{
//定義內部類的方法
public void print()
{
//直接訪問外部類的私有屬性
System.out.println(info);
}
};
//定義外部類的方法
public void fun()
{
//通過內部類的實例化對象調用方法
new Inner().print();
}
};
public class InnerClassDemo04
{
public static void main(String args[])
{
//外部類實例化對象
Outer out = new Outer();
//實例化內部類對象
Outer.Inner in = out.new Inner();
//調用內部類的方法
in.print();
}
}
3.在方法中定義內部類 ,使外部調用
//定義外部類
class Outer
{
//定義外部類的私有屬性
private String info = "hello world";
//定義外部類的方法
public void fun(final int temp)
{
//在方法中定義的內部類
class Inner
{
//定義內部類的方法
public void print()
{
//直接訪問外部類的私有屬性
System.out.println("類中的屬性:" + info);
System.out.println("方法中的參數:" + temp);
}
}
//通過內部類的實例化對象調用方法
new Inner().print();
}
}
public class InnerClassDemo05
{
public static void main(String args[]){
//調用外部類的方法
new Outer().fun(30);
}
}
Ⅳ Java:靜態內部類調用外部類的方法
static 用在類前面只是表示這個內部類與外面的類之間沒有實例之間的引用關系,是可以在內部類中直接創建外面的類的實例的。編譯器不會為我們自動創建關聯引用,但我們可以創建非關聯的實例。
這個時候相當於只是給了特定的可見性控制。
你創建兩個內部類,一個 static,一個非 static 然後在 eclipse 的 navigator 視圖中打開你的類觀察,那個非 static 類,編譯器自動創建了一個成員變數用來在外部類和內部類之間建立關聯。
Ⅵ java內部類調用外部類抽象方法為什麼會調用外部類子類實現的方法
外部類有抽象方法,那外部類一定是抽象類。所以,與內部類對象關聯的外部類對象一定是外部類的子類的實例,那調用的當然是外部類子類實現的方法。
Ⅶ java 內部類怎麼調用外部類的函數
你好!
方法1:定義內部類的一個對象,用該對象調用外部類的成員函數
方法2:直接用語句:this.外部類的成員函數名。
僅代表個人觀點,不喜勿噴,謝謝。
Ⅷ java內部類可以訪問外部類的靜態方法嗎
內部類
就相當於一個外部類的
成員變數
,所以可以
直接訪問
外部變數
,外部類不能直接訪問內部類變數,必須通過創建內部類實例的方法訪問,
new
InnerClass
(32).m就是創建內部類實例訪問內部類成員變數。
你
想不通
的肯定是指內部類的私有變數
怎麼可以
被外部類訪問吧,按常規,私有變數m只能在InnerClass里被訪問,
但你要注意,內部類就相當於一個外部類的成員變數,舉個例子。
class
Outer{
private
int
m;
private
class
Inner{
private
int
n;
private
int
k;
}
}
m和類Inner都是成員變數,他們之間是平等的,唯一不同的就是Inner它是包裝了幾個成員變數比如n,k,也就是說m
n
k是平等的,區別在於訪問n
k要通過Inner,就是要建立Inner實例訪問nk,這樣解釋夠
明白了吧