A. java外部類怎麼調用內部類的方法
首先,你要搞清楚靜態方法跟非靜態方法的區別:
非靜態方法是跟隨著類的生命周期的,當類實例化時,非靜態方法跟隨著實例化對象產生,實例化對象可以調用類中的非靜態方法,當實例化對象結束時,非靜態方法也跟著結束。就是說,非靜態方法是依附於實例化對象的,它的生命周期就是實例化對象的生命周期。
靜態方法是不受制於類的實例化對象的,即靜態方法從程序開始運行到最後釋放內存結束是一直存在的,它的生命周期就是程序的生命周期。
從以上可知,靜態方法調用非靜態方法會造成一個問題,就是生命周期的不一致,比如說:程序剛剛開始運行時,類的實例化構造函數還沒有執行,這時靜態方法是調用不了非靜態方法的;或者當實例化對象消亡之後,靜態方法也是不能夠去調用非靜態方法的。
靜態方法要想調用非靜態方法,必須要通過實例化對象去調用;當然也可以把非靜態方法變成靜態方法,這樣就不存在任何障礙了。
希望我的回答對你能夠有所幫助。
B. Java在外界如何調用局部內部類
內部類和成員變數一樣,通過外部類的實例調用內部類。
可以先創建外部類實例。
用外部類實例調用內部類構造方法創建內部類實例。
再用這個內部類實例調用內部類成員方法。
Aa=newA();
A.Bb=a.newB();
b.do1();//do是關鍵字,所以這里在do後面加了個1,否則無法編譯。
C. Java如何調用內部類的方法
參閱下段: 《內部類》
內部類是指在一個外部類的內部再定義一個類。內部類作為外部類的一個成員,並且依附於外部類而存在的。內部類可為靜態,可用protected和private修飾(而外部類只能使用public和預設的包訪問許可權)。內部類主要有以下幾類:成員內部類、局部內部類、靜態內部類、匿名內部類
為什麼需要內部類?
典型的情況是,內部類繼承自某個類或實現某個介面,內部類的代碼操作創建其的外圍類的對象。所以你可以認為內部類提供了某種進入其外圍類的窗口。使用內部類最吸引人的原因是:
每個內部類都能獨立地繼承自一個(介面的)實現,所以無論外圍類是否已經繼承了某個(介面的)實現,對於內部類都沒有影響。如果沒有內部類提供的可以繼承多個具體的或抽象的類的能力,一些設計與編程問題就很難解決。從這個角度看,內部類使得多重繼承的解決方案變得完整。介面解決了部分問題,而內部類有效地實現了「多重繼承」。
A:成員內部類
作為外部類的一個成員存在,與外部類的屬性、方法並列。
publicclass Outer {
privatestaticinti = 1;
privateintj = 10;
privateintk = 20;
publicstaticvoidouter_f1() {
}
publicvoidouter_f2() {
}
// 成員內部類中,不能定義靜態成員
// 成員內部類中,可以訪問外部類的所有成員
class Inner {
// static int inner_i = 100;//內部類中不允許定義靜態變數
intj = 100; // 內部類和外部類的實例變數可以共存
intinner_i = 1;
void inner_f1() {
System.out.println(i);
//在內部類中訪問內部類自己的變數直接用變數名
System.out.println(j);
//在內部類中訪問內部類自己的變數也可以用this.變數名
System.out.println(this.j);
//在內部類中訪問外部類中與內部類同名的實例變數用外部類名.this.變數名
System.out.println(Outer.this.j);
//如果內部類中沒有與外部類同名的變數,則可以直接用變數名訪問外部類變數
System.out.println(k);
outer_f1();
outer_f2();
}
}
//外部類的非靜態方法訪問成員內部類
publicvoidouter_f3() {
Inner inner = new Inner();
inner.inner_f1();
}
// 外部類的靜態方法訪問成員內部類,與在外部類外部訪問成員內部類一樣
publicstaticvoidouter_f4() {
//step1 建立外部類對象
Outer out = new Outer();
//step2 根據外部類對象建立內部類對象
Inner inner = out.new Inner();
//step3 訪問內部類的方法
inner.inner_f1();
}
publicstaticvoid main(String[] args) {
//outer_f4();//該語句的輸出結果和下面三條語句的輸出結果一樣
//如果要直接創建內部類的對象,不能想當然地認為只需加上外圍類Outer的名字,
//就可以按照通常的樣子生成內部類的對象,而是必須使用此外圍類的一個對象來
//創建其內部類的一個對象:
//Outer.Inner outin = out.new Inner()
//因此,除非你已經有了外圍類的一個對象,否則不可能生成內部類的對象。因為此
//內部類的對象會悄悄地鏈接到創建它的外圍類的對象。如果你用的是靜態的內部類,
//那就不需要對其外圍類對象的引用。
Outer out = new Outer();
Outer.Inner outin = out.new Inner();
outin.inner_f1();
}
}
注意:內部類是一個編譯時的概念,一旦編譯成功,就會成為完全不同的兩類。對於一個名為outer的外部類和其內部定義的名為inner的內部類。編譯完成後出現outer.class和outer$inner.class兩類。
B:局部內部類
在方法中定義的內部類稱為局部內部類。與局部變數類似,局部內部類不能有訪問說明符,因為它不是外圍類的一部分,但是它可以訪問當前代碼塊內的常量,和此外圍類所有的成員。
publicclass Outer {
privateints = 100;
privateintout_i = 1;
publicvoid f(finalint k) {
finalint s = 200;
int i = 1;
finalint j = 10;
//定義在方法內部
class Inner {
ints = 300;// 可以定義與外部類同名的變數
// static int m = 20;//不可以定義靜態變數
Inner(int k) {
inner_f(k);
}
intinner_i = 100;
voidinner_f(int k) {
//如果內部類沒有與外部類同名的變數,在內部類中可以直接訪問外部類的實例變數
System.out.println(out_i);
//可以訪問外部類的局部變數(即方法內的變數),但是變數必須是final的
System.out.println(j);
//System.out.println(i);
//如果內部類中有與外部類同名的變數,直接用變數名訪問的是內部類的變數
System.out.println(s);
//用this.變數名訪問的也是內部類變數
System.out.println(this.s);
//用外部類名.this.內部類變數名訪問的是外部類變數
System.out.println(Outer.this.s);
}
}
new Inner(k);
}
publicstaticvoid main(String[] args) {
// 訪問局部內部類必須先有外部類對象
Outer out = new Outer();
out.f(3);
}
}
C:靜態內部類(嵌套類):(注意:前兩種內部類與變數類似,所以可以對照參考變數)
如果你不需要內部類對象與其外圍類對象之間有聯系,那你可以將內部類聲明為static。這通常稱為嵌套類(nested class)。想要理解static應用於內部類時的含義,你就必須記住,普通的內部類對象隱含地保存了一個引用,指向創建它的外圍類對象。然而,當內部類是static的時,就不是這樣了。嵌套類意味著:
1. 要創建嵌套類的對象,並不需要其外圍類的對象。
2. 不能從嵌套類的對象中訪問非靜態的外圍類對象。
publicclass Outer {
privatestaticinti = 1;
privateintj = 10;
publicstaticvoidouter_f1() {
}
publicvoidouter_f2() {
}
// 靜態內部類可以用public,protected,private修飾
// 靜態內部類中可以定義靜態或者非靜態的成員
staticclass Inner {
staticintinner_i = 100;
intinner_j = 200;
staticvoidinner_f1() {
//靜態內部類只能訪問外部類的靜態成員(包括靜態變數和靜態方法)
System.out.println("Outer.i" + i);
outer_f1();
}
voidinner_f2() {
// 靜態內部類不能訪問外部類的非靜態成員(包括非靜態變數和非靜態方法)
// System.out.println("Outer.i"+j);
// outer_f2();
}
}
publicvoidouter_f3() {
// 外部類訪問內部類的靜態成員:內部類.靜態成員
System.out.println(Inner.inner_i);
Inner.inner_f1();
// 外部類訪問內部類的非靜態成員:實例化內部類即可
Inner inner = new Inner();
inner.inner_f2();
}
publicstaticvoid main(String[] args) {
newOuter().outer_f3();
}
}
生成一個靜態內部類不需要外部類成員:這是靜態內部類和成員內部類的區別。靜態內部類的對象可以直接生成:Outer.Inner in = new Outer.Inner();而不需要通過生成外部類對象來生成。這樣實際上使靜態內部類成為了一個頂級類(正常情況下,你不能在介面內部放置任何代碼,但嵌套類可以作為介面的一部分,因為它是static 的。只是將嵌套類置於介面的命名空間內,這並不違反介面的規則)
D. 如何寫內部類,內部類中如何調用
一般來說,外部類調用內部類的方法分為以下幾種情況:
1.使用static可以聲明一個內部類, 可以直接在外部調用
// 定義外部類
class Outer
{
// 定義外部類的私有屬性
private static String info = "hello world";
// 使用static定義內部類為外部類
static class Inner
{
// 定義內部類的方法
public void print()
{
// 直接訪問外部類的私有屬性
System.out.println(info);
}
};
E. 怎麼調用內部類的方法
內部類通常都會保存在同一個文件當中,所以你首先應該調用這個文件,然後用此調用的方式來調用一下使用的這個類。
F. 方法體中的內部類中的方法怎麼調用,代碼如下.求教
因為你使用system.out.println這個方法輸出個對象的時候,因為只能輸出字元串,所以系統就會默認調用類中的toStringf方法,因為這個方法是源自object類的,所以幾乎所有的類都有這個方法。而你的代碼重寫了這個方法,所以輸出的時候就調用了這個方法,然後按你的規則進行了輸出。
比如
1
2
3
4
5
6
7
8
9
public class Test{
public Test(){}
public void toString(){
System.out.println("----test------");
}
//假設:Test test=new Test();
// System.out.println(test);
//輸出的結果就是"----test------"
}
G. 如何調用內部類
例如類A里有個類B,則調用時為
A a = new A();
A.B b = a.new B();
H. 如何調用內部類中的靜態方法
一般來說,外部類調用內部類的方法分為以下幾種情況:
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();
}
};
I. java外部類怎樣調用內部類方法
public class Lei{
public static void main(String ages[]){
Leis x=new Leis();
}
public static class Leis{
public Leis(){
System.out.println("asd");
}
}
}
主函數調用的是靜態方法,內部類要定義為static,Leis()為構造方法,用來初始化成員變數,不能用「x.Leis()」
J. java怎麼調用另一個類中的方法中的內部類中的方法
class Hello {
public static void pt(){
new A().ppt();
class A {
void ppt(){//ppt()方法不能在其他類中調用,只能在pt()方法中被調用
System.out.println("hello word");
}
}
}
}
public class Test {
public static void main(String[] args){
Hello.pt();
}
}