如何調用靜態內部類?
從外部如何訪問靜態內部類
首先內部靜態類和其成員必須是public或者protected的,public時可以直接從外部訪問,protected則只能通過繼承訪問
如果其成員和方法都為靜態的
可以直接訪問,如
A.B.靜態成員
A.B.靜態方法
但是如果其成員和方法都不是靜態的,則需要通過創建對象的方式訪問
比如
public class A {
public static class B {
public String c = "";
public void D() {
}
}
}
要訪問內部靜態類B的成員c和方法D
則需要創建對象才行,如
A.B ab = new A.B();
String w = ab.c;
ab.D()
如何調用內部類中的靜態方法
一般來說,外部類調用內部類的方法分為以下幾種情況:
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[])
{
// 調用外部類的fun()方法
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();
}
};
為什麼引用靜態內部類不需要創建對象?
“創建一個static內部類的對象,我們不需要一個外部類對象”是指:當你試圖要new一個static的內部類時,不需要先將外部類實例化;而對非static的內部類進行操作時(比如new)時,是必須先將外部類實例化的。public class AAA{ public static void main(String[] args) { // Create static inner class objects. AAA.StaticInner in = new AAA.StaticInner(); in.f1(); // Create non-static inner class objects. AAA a = new AAA(); AAA.NonStaticInner non = a.getNonStaticInner(); non.f2(); } static class StaticInner { void f1() { System.out.println("Inner funcation f1()!"); } } class NonStaticInner { void f2() { System.out.println("Inner funcation f2()!"); } } NonStaticInner getNonStaticInner() { return new NonStaticInner(); }}
如何調用內部類? 5分
例如類A裡有個類B,則調用時為
A a = ne揣 A();
A.B b = a.new B();
java如何調用靜態內部類的非靜態方法如何調用
Music.MusicInfo info = new Music.MusicInfo()試試
Java 靜態內部類作用?
需要了解2個概念:內部類和靜態修飾符static
1)首先,用內部類是因為內部類與所在外部類有一定的關係,往往只有該外部類調用此內部類。所以沒有必要專門用一個Java文件存放這個類。
2)靜態都是用來修飾類的內部成員的。比如靜態方法,靜態成員變量,靜態常量。它唯一的作用就是隨著類的加載(而不是隨著對象的產生)而產生,以致可以用類名+靜態成員名直接獲得。
這樣靜態內部類就可以理解了,因為這個類沒有必要單獨存放一個文件,它一般來說只被所在外部類使用。並且它可以直接被用 外部類名+內部類名 獲得。
以下舉例說明怎麼使用:
Student類有個叫School的內部類(非靜態)
Student stu = new Student();
stu.School sch = new stu.School();
sch就是School的一個對象。
假如School是內部靜態類:
Student.School sch = new Student.School();
Java:靜態內部類調用外部類的方法
static 用在類前面只是表示這個內部類與外面的類之間沒有實例之間的引用關係,是可以在內部類中直接創建外面的類的實例的。編譯器不會為我們自動創建關聯引用,但我們可以創建非關聯的實例。
這個時候相當於只是給了特定的可見性控制。
你創建兩個內部類,一個 static,一個非 static 然後在 eclipse 的 navigator 視圖中打開你的類觀察,那個非 static 類,編譯器自動創建了一個成員變量用來在外部類和內部類之間建立關聯。
一個關於Java靜態內部類的問題
靜態內部類不需要外部類實例化,直接用外部類調用靜態內部類實例化就行了。雖然第二種方法可以調用,但實際上還是調用的類的靜態成員,並非實例化新的對象就會有新的靜態成員。另外我只能說內部類不完全等同於外部類的一個靜態成員,實例化對象的時候並沒有把類的信息傳遞給對象。
如何理解外部其他類訪問靜態內部類中的方法new outer.inner().function();
1 靜態內部類中為什麼還能有非靜態方法?被static修飾的類(內部類)怎麼還能new 對象?
類是不是靜態的和類中的方法是不是靜態的沒有絕對聯繫,類是靜態的你可以這樣用Outer.Inner,就好像使用Outer類的靜態成員的方式一樣
2 Out.Inner in = Outer.Inner in = new Outer.Inner();
你可以把Outer.Inne看作一個整體,就像C++的名稱空間一樣,現在要創建的是內部類的對象,它並不需要外部類的對象來創建,你可以把它們想象成兩個完全不同的類,其中一個在另一個內部而已。
Out.Inner in = new Outer().new Inner();
這麼寫new Outer()是一個對象,對象.new是什麼意思呢?
3訪問一個類中的方法應該這樣 new 類().function(); 而題目中的new outer.inner().function();根本就沒有外部類實例
new outer.inner()已經創建了一個內部類的對象,然後調用內部類對象的function(),調用內部類的function(),並不需要外部類的對象
Java 內部類如何被外部類調用
服了你了,能把程序寫成這樣。一個java文件裡可以有多個類,但只能有一個public類,而且這個類必須是外部類,不能是內部類。而且你在Test裡實例化inner的方法也不對,inner的類型始終是Outer.Inner,不會因為Outer實例化而變成outer.Inner,只不過編譯器還沒有報出那裡的錯誤而已。寫成這樣:
class Outer{
private int size=10;
class Inner{
public void doStuff(){
System.out.println(++size);
}
}
}
public class Test{
public static void main(String [] args){
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.doStuff();
}
}