当前位置:首页 » 编程语言 » 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 16:18:38 浏览:349
国产系列ftp 发布:2024-11-01 15:49:53 浏览:702
招编程师傅招聘 发布:2024-11-01 15:34:51 浏览:192
kkt编程 发布:2024-11-01 15:31:26 浏览:614
我的世界管理员进服务器提示 发布:2024-11-01 15:21:12 浏览:126
如何删除qq空间访问记录 发布:2024-11-01 15:20:07 浏览:323
微信上传图片失败 发布:2024-11-01 15:19:53 浏览:117
python网站域名服务器搭建 发布:2024-11-01 15:18:36 浏览:693
量产工具加密 发布:2024-11-01 15:14:31 浏览:674
储备存储 发布:2024-11-01 15:14:28 浏览:330