當前位置:首頁 » 編程語言 » java內部類調用

java內部類調用

發布時間: 2023-04-23 15:51:39

java內部類怎麼直接調用外部類啊

publicclassOuter{
intx;
Strings="hello";
publicvoidtest(){
System.out.print("test");
}
publicclassInner{
ints=20;
publicvoidtestInner(){
//可以直接使用外部類的成員變數和成員方法
x=0;
test();
//如果外部類的成員變數和內部類變數重名,可以這樣調用外部類的變數
Outer.this.s="test";
//當然你可以new外部類對象這也是沒問題的
Outero=newOuter();
o.x=30;
o.test();
}
}
}

Ⅱ java 內部類怎麼調用外部類的函數

你好!
方法1:定義內部類的一個對象,用該對象調用外部類的成員函數
方法2:直接用語句:this.外部類的成員函數名。
僅代表個人觀點,不喜勿噴,謝謝。

Ⅲ java內部類調用外部類抽象方法為什麼會調用外部類子類實現的方法

外部類有抽象方法,那外部類一定是抽象類。所以,與內部類對象關聯的外部類對象一定是外部類的子類的實例,那調用的當然是外部類子類實現的方法。

Ⅳ java 主方法怎麼調用內部類的方法

System.out.println(x);//這個是55

System.out.println(In.x);//這個是9

樓主這兩行是對的,樓上是不用兄弟認為人家這兒錯了?


1,後面那個是無法做到的那個x是方法的局部變數,在進入方法時被推到棧里,方法結束後就出棧了。除非有方式可以跑一個在主方法中的線程監控當前棧中變數,就像是Debug一樣,我也研究好久這個,不過沒發現有。

2, 也像1一樣沒有侵入性,你可以用位元組碼框架去操作類,動態地改變方法的行為,也就是說你可以在main方法中用程序語言去改變doit(x)方法里所做的事情。

3, 再侵入點兒,你可以傳進那個doit(int)方法一個Callback,你明白我意思?給你看個回調式:

publicclassHelloJava{
privateinterfaceListener{
publicvoidlistenDoit(intx);
}
privatestaticintx=55;
privateclassIn{
privateListenerlistener;
privatestaticfinalintx=9;
publicIn(Listenerlistener){this.listener=listener;}
publicvoiddoit(intx){
listener.listenDoit(x);
x=6;//這個X和上一行的應該是同一個吧?怎麼在主方法里輸出這個量?
listener.listenDoit(x);
HelloJava.this.x++;
}
}
publicstaticvoidmain(String[]args){
System.out.println(x);//這個是55
System.out.println(In.x);//這個是9
Inin=newHelloJava().newIn(newListener(){
@Override
publicvoidlistenDoit(intx){
System.out.println(x);
}});
in.doit(0);
System.out.println(x);//這個是55
System.out.println(In.x);//這個是10
}
}

還有許多方式可以做到,比如代理模式等等,不過都大同小異。該方法好處是不改變方法的原定義模型。如返回值從void改成int,如果doit的返回值本身就是String,要返回個其他的東西,怎麼去改變返回值完成?

另外運行一下會發現最後兩行輸出不是55 10, 而是56, 9,你就知道HelloJava.this.x++;做的是什麼了。

4,然後就是樓上朋友們都說的方式,返回值。

Ⅳ java 用內部類調用外部類的方法修改外部類的內容

將JLabel定義為外部類的成檔坦賣員變數
內部類 只能訪問外信亮部類成員變數或 局部final類變行逗量

Ⅵ Java 內部類如何被外部類調用

首先,你要搞清楚靜態方法跟非靜態方法的區別:

非靜態方法是跟隨著類的生命周期的,當類實例化時,非靜態方法跟隨著實例化對象產生,實例化對象可以調用類中的非靜態方法,當實例化對象結束時,非靜態方法也跟著結束。就是說,非靜態方法是依附於實例化對象的,它的生命周期就是實例化對象的生命周期。

靜態方法是不受制於類的實例化對象的,即靜態方法從程序開始運行到最後釋放內存結束是一直存在的,它的生命周期就是程序的生命周期。

從以上可知,靜態方法調用非靜態方法會造成一個問題,就是生命周期的不一致,比如說:程序剛剛開始運行時,類的實例化構造函數還沒有執行,這時靜態方法是調用不了非靜態方法的;或者當實例化對象消亡之後,靜態方法也是不能夠去調用非靜態方法的。

靜態方法要想調用非靜態方法,必須要通過實例化對象去調用;當然也可以把非靜態方法變成靜態方法,這樣就不存在任何障礙了。

希望我的回答對你能夠有所幫助。

Ⅶ Java在外界如何調用局部內部類

  1. 內部類和成員變數一樣,通過外部類的實例調用內部類。

  2. 可以先創建外部類實例。

  3. 用外部類實例調用內部類構造方法創建內部類實例。

  4. 再用這個內部類實例調用內部類成員方法。

Aa=newA();
A.Bb=a.newB();
b.do1();//do是關鍵字,所以這里在do後面加了個1,否則無法編譯

Ⅷ 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();
}

Ⅸ jsp頁面上如何調用java類里的內部類

1、新建一個項目,在src文件夾下添加一個包:如:test
2、再在包中添加一個類:如
package test;
public class conDatabase {
public String con(){
return "success";
}
}
3、在jsp文件的開頭引入
<%@ page import= "test.* "%>
4、在<body> </body>中添加相應的java代碼,如:
<%
String str;
conDatabase cd =new conDatabase();
%>
<%=cd.con() %>

Ⅹ java 主方法怎麼調用內部類的方法

System.out.println(x);//這個是55
System.out.println(In.x);//這個是9
樓主這兩行是對的,樓上是不用兄弟認為人家這兒錯了?

1,後面那個是無法做到的那個x是方法 的局部變數,在進入方法時被推到棧里,方法結束後就出棧了。除非有方式可以跑一個在主方法中的線程監控當前棧中變數,就像是Debug一樣,我也研究好久這個,不過沒發現有。

2,
也像1一樣沒有侵入性,你可以用位元組碼框架去操作類,動態地改變方法的行為,也就是說你可以在main方法中用程序語言去改變doit(x)方法里所做的事情。

3,
再侵入點兒,你可以傳進那個doit(int)方法一個Callback, 你明白我意思?給你看個回調式:
public class HelloJava{
private interface Listener{
public void listenDoit(int x);
}
private static int x=55;
private class In{
private Listener listener;
private static final int x=9;
public In(Listener listener){this.listener=listener;}
public void doit(int x){
listener.listenDoit(x);
x=6;//這個X和上一行的應該是同一個吧?怎麼在主方法里輸出這個量?
listener.listenDoit(x);
HelloJava.this.x++;
}
}
public static void main(String[] args){
System.out.println(x);//這個是55
System.out.println(In.x);//這個是9
In in =new HelloJava().new In(new Listener(){
@Override
public void listenDoit(int x) {
System.out.println(x);
}});
in.doit(0);
System.out.println(x);//這個是55
System.out.println(In.x);//這個是10
}
}

還有許多方式可以做到,比如代理模式等等,不過都大同小異。該方法好處是不改變方法的原定義模型。如返回值從void改成int,如果doit的返回值本身就是String,要返回個其他的東西,怎麼去改變返回值完成?

另外運行一下會發現最後兩行輸出不是55
10,
而是56,
9,你就知道HelloJava.this.x++;做的是什麼了。

4,然後就是樓上朋友們都說的方式,返回值。

熱點內容
大激戰腳本 發布:2024-11-01 18:35:25 瀏覽:110
中國大學mooc密碼要求是什麼 發布:2024-11-01 18:33:45 瀏覽:817
jrtplib編譯 發布:2024-11-01 18:06:01 瀏覽:227
java代碼中if 發布:2024-11-01 18:02:40 瀏覽:378
android定時刷新 發布:2024-11-01 17:59:43 瀏覽:1000
炎黃解說我的世界伺服器生存 發布:2024-11-01 17:59:42 瀏覽:543
如何清楚網頁緩存 發布:2024-11-01 17:53:58 瀏覽:553
linux文件許可權不夠 發布:2024-11-01 17:53:19 瀏覽:918
c語言中10是什麼意思 發布:2024-11-01 17:45:08 瀏覽:893
裝棉衣壓縮袋 發布:2024-11-01 17:37:18 瀏覽:298