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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜天伟 中级黑马   /  2012-12-20 18:19  /  2238 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. 内部类定义在局部时,
  3. 1,不可以被成员修饰符修饰
  4. 2,可以直接访问外部类中的成员,因为还持有外部类中的引用。
  5.         但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。
  6. */
  7. class Outer
  8. {
  9.         int x = 3;

  10.         void method(final int a)
  11.         {
  12.                 final int y = 4;
  13.                 class Inner
  14.                 {
  15.                         void function()
  16.                         {
  17.                                 System.out.println(a);
  18.                         }
  19.                 }
  20.         new Inner().function();
  21.                
  22.                
  23.         }
  24.         class In extends Outer
  25.         {
  26.                 void show()
  27.                 {
  28.                         System.out.println("haha");
  29.                 }
  30.                 lili(2);
  31.         }
  32.         void lili(int b)
  33.         {
  34.                 new In().method(b);
  35.         }
  36. }


  37. class  InnerClassDemo3
  38. {
  39.         public static void main(String[] args)
  40.         {
  41.                 Outer out = new Outer();
  42.                 out.method(7);
  43.                 //new Outer().method(8);
  44.                 out.method(8);
  45.                 out.lili();
  46.         }

  47. }
复制代码
内部类可以直接访问外部类的成员,那么内部类访问外部类的成员函数,应该怎么写呢
我这样做,却编译失败  
提示:InnerClassDemo3.java:31: 错误: 方法声明无效; 需要返回类型
                lili(2);
                ^
InnerClassDemo3.java:31: 错误: 非法的类型开始
                lili(2);
                     ^
2 个错误
这是怎么回事

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

16 个回复

倒序浏览
楼上的贴关键代码就可以了!
回复 使用道具 举报
怎么没人呢
回复 使用道具 举报
怎么没人呢
回复 使用道具 举报
怎么没人呢
回复 使用道具 举报
:(怎么没人呢
回复 使用道具 举报
本帖最后由 孙辉辉 于 2012-12-21 01:00 编辑

。。。你这代码有问题吧。
class In extends Outer
        {
                void show()
                {
                        System.out.println("haha");
                }
                lili(2);
        }

内部类,并且还继承了它的外部类?这是什么套路?
并且 lili(2);这个是什么意思?,如果你是想调用 lili(2);这个方法,也要把他写在 void show()函数里面,你写在类里面,就是要覆写了,不是调用,他不是对象


另外最后一句也有错误,你没有传参数,应该改成out.lili(2);
回复 使用道具 举报
孙辉辉 发表于 2012-12-21 00:57
。。。你这代码有问题吧。
class In extends Outer
        {

对对对   会覆写啊   
老毕说内部类继承外部类没用
我就想试试行不行
回复 使用道具 举报
清水 中级黑马 2012-12-21 20:07:41
9#
内部类继承外部类, 岂不是一个死循环……
回复 使用道具 举报
清冰 发表于 2012-12-21 20:07
内部类继承外部类, 岂不是一个死循环……

为什么呢?
回复 使用道具 举报
清冰 发表于 2012-12-21 20:07
内部类继承外部类, 岂不是一个死循环……

为什么呢?
回复 使用道具 举报
楼主想什么呢
  1.    class In extends Outer
  2.         {
  3.                 void show()
  4.                 {
  5.                         System.out.println("haha");
  6.                 }
  7.                 lili(2);
  8.         }
  9.         void lili(int b)
  10.         {
  11.                 new In().method(b);
  12.         }
  13. }
复制代码
你写 class in 想干嘛的,我认为根本没意义,调用lili(2)又是想做什么的?想得到什么结果?目测删掉都不影响结果,你main方法里的lili方法没参数这个肯定是错的
回复 使用道具 举报
夏晓彤 发表于 2012-12-22 00:14
楼主想什么呢你写 class in 想干嘛的,我认为根本没意义,调用lili(2)又是想做什么的?想得到什么结果? ...

我只是想试试内部类继承外部类  名字随便起的
回复 使用道具 举报
这个类写得挺复杂的,内部类继承外部类{:soso_e125:}
回复 使用道具 举报
黄锦成 发表于 2012-12-25 11:00
这个类写得挺复杂的,内部类继承外部类

内部类继承外部类到底可不可以呢
回复 使用道具 举报
杜天伟 发表于 2012-12-26 23:55
内部类继承外部类到底可不可以呢

像死循环,你内部类继承外部类,外部类中的内部类有继承外部类,外部类中的内部类有继承外部类,......
就这样一直下去
回复 使用道具 举报
黄锦成 发表于 2012-12-27 00:52
像死循环,你内部类继承外部类,外部类中的内部类有继承外部类,外部类中的内部类有继承外部类,......
...

能否编译通过或者运行呢  :loveliness:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马