A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Outer{
private int num  = 10;
public void function(final int num){
  class Inner{
   int num = 20;
   public void show(int num){
    System.out.println("num = " + num);
   }
  }
}
}

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

5 个回复

倒序浏览
临时想到这种:
  1. class Outer{
  2.          private int num  = 10;
  3.          public void function(final int num){
  4.                 final int finalLocalNum=num;//function中的final修饰的number可以直接被Inner中的
  5.                 class Inner{                //方法访问,但是你show的形参也是num,它访问的是show中的num
  6.                                                 //那么通过折中的方法再定义一个变量区别num
  7.                 private int num = 20;
  8.            
  9.            public void show(int num){
  10.              System.out.println("num = " + num);//30
  11.              System.out.println("finalLocalNum = " +finalLocalNum);//取到final int num的值
  12.              //让我回顾一下
  13.              System.out.println("Inner's num = " + this.num);//20  访问Inner成员变量
  14.              System.out.println("Outer's num= "+Outer.this.num);//10 Outer成员变量
  15.             }
  16.            }
  17.            new Inner().show(30);
  18.          }
  19.          
  20. }
  21. class Test{
  22.         public static void main(String[] args){
  23.                
  24.                 new Outer().function(50);
  25.         }
  26. }
复制代码
建议不要搞这么多同名变量,后期再用时自己都分不清了,自找麻烦- -~~

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
该内部类是定义在局部的,这种情况下内部类可以直接访问外部类成员,但不可以访问它所在的局部变量(被final 修饰的局部变量除外)。你定义的final int num实在想不出有什么意义。
回复 使用道具 举报
内部类定义在局部时,
1,不可以被成员修饰符修饰
2,可以直接访问外部类中的成员,因为还持有外部类中的引用。
        但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。


  1. public class Outer{
  2.         private int num  = 10;//在下面输出语句中用Outer.this.num访问这里的num;
  3.         public void function(final int num){//如果再这里你还要非用num定义一个同名变量的话可能就没法访问了。如果定义的不是num,在下面输出语句中用变量名可以访问他;
  4.           class Inner{
  5.                    int num = 20;//在下面输出语句中用this.num访问这里的num;
  6.                    public void show(int num){//在下面输出语句中用 num访问这里的num;
  7.                            System.out.println("num = " + Outer.this.num);
  8.                    }
  9.           }
  10.           new Inner().show(30);
  11.         }
  12.         public static void main(String[] args){
  13.                 new Outer().function(45);
  14.                
  15.         }
  16. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
final变量在方法中,要调用者传入一个常量,这个常量可以任意的,由调用者决定,要想拿到其值,必先取得其引用地址,就要用一个引用变量来存其地址。而地址是动态的,所以你想在此类中访问到final变量应该办不到。
回复 使用道具 举报
{:soso_e176:}
亲,请问下问题是否解决?
如果已解决请及时将未解决改为已解决
如果未解决请回帖追问
三天未回复的将视为已解决

详情参考: 如何更改分类

保持队形,谢谢合作{:soso_e121:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马