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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ☆╰學不会☆╮ 中级黑马   /  2013-10-31 19:06  /  959 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ☆╰學不会☆╮ 于 2013-10-31 20:50 编辑

内部类的一些问题 有点不理解
class Demo{
  private int  age=10;
class Neibu{             //内部类
     private   int age=3;  
  public void met(){
        int age=5;
   system.out.,println("age="+age);
}
}
public static void main(String[] args){
  Demo.Neibu aa=new Demo().new Neibu();
           aa.met();
}  }
如果想让 输出结果为10 访问外部类中的成员变量 必须要内部类中没有名字相同的变量吗、
内部类的类名可以用private修饰 这么做 创建内部类的意义是什么呢?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

8 个回复

倒序浏览
FFF 金牌黑马 2013-10-31 19:35:15
沙发
本帖最后由 FFF 于 2013-10-31 19:49 编辑

你的代码写得好乱。错误很多。
给你看这个例子。也许能帮你理解一下内部类。
代码如下:
  1. public class Temp10_31 {
  2. private int s = 100;
  3. private int out_i = 1;
  4. public void f(final int k){
  5.    final int s = 200;
  6.    int i = 1;
  7.    final int j = 10;
  8.    class Inner{//定义在方法内部
  9.     int s = 300;//可以定义与外部类同名的变量
  10.     //static int m = 20;//不可以定义静态变量
  11.     Inner(int k){
  12.      inner_f(k);
  13.     }
  14.     int inner_i = 100;
  15.     void inner_f(int k){
  16.      System.out.println(out_i);
  17. //如果内部类没有与外部类同名的变量,在内部类中可以直接访问外部类的实例变量
  18.      System.out.println(k);
  19. //可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的
  20.      System.out.println(i);
  21. //访问不了i
  22.      System.out.println(s);
  23. //如果内部类中有与外部类同名的变量,直接用变量名访问的是内部类的变量
  24.      System.out.println(this.s);
  25. //用this.变量名 访问的也是内部类变量
  26.      System.out.println(Temp10_31.this.s);
  27. //用外部类名.this.内部类变量名 访问的是外部类变量
  28.     }
  29.    }
  30.    new Inner(k);
  31. }

  32. public static void main(String[] args) {
  33. //访问局部内部类必须先有外部类对象
  34.    Temp10_31 out = new Temp10_31();
  35.    out.f(3);
  36. }

  37. }
复制代码
内部类在java应用中不是特别常见,不过还是很重要的,他是解决java只支持单继承所带来的瑕疵,内部类使得多重继承的解决方案变得完整。接口问题解决了部分问题。而内部类则有效的实现了"多重继承"。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
我认为,之所以定义内部类是因为生活中有很多是类中包含类的例子,比如说人的类,又定义了手的类,手有单独的属性和方法,就可以把手定义为人的内部类,这样定义为内部类更加容易让人接受,也让java语言更加贴近现实生活。
内部类至于怎么调用外部类的同名属性不知道了。。留给后边的人回答吧。
回复 使用道具 举报
FFF 发表于 2013-10-31 19:35
你的代码写得好乱。错误很多。

内部类在java应用中不是特别常见,不过还是很重要的,他是解决java只支持单 ...

所以说 现在还是迷糊的状态呢、
回复 使用道具 举报
public class test {

private int  age=10;
class Neibu
    {             //内部类
  private   int age=3;  
     public void met()
     {
      int age=5;
            System.out.println("age"+test.this.age);     //该这么写
     }
    }   
public static void main(String[] args)
{
  test.Neibu aa=new test().new Neibu();
         aa.met();
}
}

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
内部类就是说这个类跟它的外部类关系比较密切,跟其他类关系不大,单独放一个类属于碍眼行为,
内部类访问外部同名变量可以通过new一个外部类实例的方法获得,
本来从其他类调用内部类就属于没事找事行为,内部私有类就是为了彻底杜绝这种行为
回复 使用道具 举报
本帖最后由 李新辉 于 2013-10-31 21:14 编辑

class Demo
{
        private int age=10;//想打印10,笑脸处这样写:Demo.this.age
         class Neibu//内类位于成员位置上,不用建立对象直接访问成员变量
        {            
                private int age=3;  //想打印3,笑脸处这样写:this.age
                public void met()
                {
                    int age=5;//想打印5,笑脸处这样写:age
                    system.out.println("age="+{:soso_e100:});
                }
        }
                public static void main(String[] args)
                {
                    Demo.Neibu aa=new Demo().new Neibu();
                    aa.met();
                }
}

随便哪里定义都可以
只是如果都定义了  就要指明要打印哪一个age
this是对象的引用,哪个对象调用met()这个 函数,this就指向谁的对象


当上面代码中的三处age值定义了其中任一个
age前的这个引用就可以省略
不然就必须写了……

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
如果问题已经解决,请及时修改主题为“提问结束”
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
本帖最后由 --_.Is’攸稀 于 2013-10-31 21:32 编辑

想要输出结果为10.  输出语句就得是System.out.,println("age="+Demo.this.age);//-----引用外部类的成员,就用外部类名.this.成员变量名想要输出结果为3,输出语句就得是System.out.,println("age="+this.age);//引用自己类成员,就用this.成员变量名
想要输出结果为5,输出语句就得是System.out.,println("age="+age);//这个就直接引用成员方法里的变量
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马