class InnerTest{
InCls ic = null;
int k = 3;
public InnerTest(){
}
public InnerTest(InCls ic){
this.ic = ic;
}
public int add(int a,int b){
System.out.println("外部类的add方法");
return a+b;
}
public int add(int a,int b,int c){
return ic.add(ic.add(a, b),c);
}
class InCls{
int m = add(2,4);
int h = InnerTest.this.add(10, 4);
public InCls(){
}
public int add(int a,int b){
System.out.println("内部类的add方法");
return a*b;
}
}
}public class InnerCls {
public static void main(String args[]){
int a = 3,b=6,c=5;
InnerTest it = new InnerTest();
InnerTest.InCls iic = it.new InCls();
InnerTest intt = new InnerTest(iic);
System.out.println(iic.m);
}
}
输出是:内部类的add方法
外部类的add方法
8
InCls ic = null;
int k = 3;
public InnerTest(){
}
public InnerTest(InCls ic){
this.ic = ic;
}
public int add(int a,int b){
System.out.println("外部类的add方法");
return a+b;
}
public int add(int a,int b,int c){
return ic.add(ic.add(a, b),c);
}
class InCls{
int m = add(2,4);
int h = InnerTest.this.add(10, 4);
public InCls(){
}
public int add(int a,int b){
System.out.println("内部类的add方法");
return a*b;
}
}
}public class InnerCls {
public static void main(String args[]){
int a = 3,b=6,c=5;
InnerTest it = new InnerTest();
InnerTest.InCls iic = it.new InCls();
InnerTest intt = new InnerTest(iic);
System.out.println(iic.m);
}
}
输出是:内部类的add方法
外部类的add方法
8
解决方案 »
- JTabbedPane里的标签ChangeEvent问题
- 求 jfreechar相关开发包。。
- 求助]帮我看看Update语句哪错了!谢谢!!
- 我们公司现在需要做C/S模式的软件,请问Java好还是.NET好?
- 线上求救:这样一个上机习题,有没有帮我做出来的啊,做不出来就要被辞掉了啊,,,,200分,做出来再给,用swing和javabean做,
- 类之间调用--import a1.QrSql
- 问一关于事件的问题。
- 怎么做这个GUI呢?哥哥们帮帮忙。
- 高手帮忙,一个想爆头的问题,从文件里面读出一个 double 型的数据。
- 初级问题怎么回事,送分啦!
- 关于while()循环的问题
- 接口对象可以做参数进行传递吗?
2、在发帖文本框的上方单击“#”按钮,选择 Java
3、将代码粘贴到【code=Java】和【/code】之间。发出来的帖子就会是下面的效果:public class Hello { // 程序入口
public static void main(String[] args) {
System.out.println("Hello!");
}
}
内部类的add方法 是初始化m时输出.所以m是8
外部类的add方法 是初始化h时输出,因为已经给定了外部类的引用.h是14
class InnerTest {
InCls ic = null;
int k = 3; public InnerTest() {
} public InnerTest(InCls ic) {
this.ic = ic;
} public int add(int a, int b) {
System.out.println("外部类的add方法");
return a + b;
} public int add(int a, int b, int c) {
return ic.add(ic.add(a, b), c);
} class InCls {
int m = add(2, 4);
int h = InnerTest.this.add(10, 4); public InCls() {
} public int add(int a, int b) {
System.out.println("内部类的add方法");
return a * b;
}
}
}public class InnerCls { public static void main(String args[]) {
int a = 3, b = 6, c = 5;
InnerTest it = new InnerTest();
InnerTest.InCls iic = it.new InCls();
InnerTest intt = new InnerTest(iic);
System.out.println(iic.m); }
}
http://aoyi.javaeye.com/blog/361694
InnerTest intt = new InnerTest(iic);//调用了外部类的带参数的构造方法,此时将内部类对象iic传入赋值给外部类中的ic属性(这里ic是内部类的对象的引用,它也是外部类的一个属性)
然后,既然创建了内部类的对象,那么自然一下这两句话就要执行
int m = add(2, 4);
int h = InnerTest.this.add(10, 4);
所以这是先条用了内部类中的add方法!此时m=8
然后条用了外部类的add方法,m是内部类的属性,所以打印icc.m自然等于8不要被外部类的其他方法所干扰!比如
public int add(int a, int b, int c) {
return ic.add(ic.add(a, b), c);
}
这个防范根本没有执行过!!!
这是我的答案,如果有错误请指正!!
//创建内部类实例,int m = add(2, 4); 被执行,调用内部类自己的add方法,输出 内部类的add方法,此时iic.m=8
//然后int h = InnerTest.this.add(10, 4); 被执行,调用外部类的add方法,输出 外部类的add方法,此时iic.h=14
InnerTest intt = new InnerTest(iic);
System.out.println(iic.m); //iic.m=8,所以这里输出8
iic.m执行的是内部类中的m = add(2, 4);结果就是
内部类的add方法 和8;
之后又执行了h = InnerTest.this.add(10, 4)
调用外部类的add方法,结果是
外部类的add方法,14
所以结果就是
内部类的add方法
外部类的add方法
8