黑马程序员技术交流社区

标题: 内部类和外部类 [打印本页]

作者: 杜天伟    时间: 2012-12-20 18:19
标题: 内部类和外部类
  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 个错误
这是怎么回事
作者: 杨志    时间: 2012-12-20 21:53
楼上的贴关键代码就可以了!
作者: 杜天伟    时间: 2012-12-20 22:15
怎么没人呢
作者: 杜天伟    时间: 2012-12-20 22:16
怎么没人呢
作者: 杜天伟    时间: 2012-12-20 22:16
怎么没人呢
作者: 杜天伟    时间: 2012-12-20 22:17
:(怎么没人呢
作者: 孙辉辉    时间: 2012-12-21 00:57
本帖最后由 孙辉辉 于 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 15:21
孙辉辉 发表于 2012-12-21 00:57
。。。你这代码有问题吧。
class In extends Outer
        {

对对对   会覆写啊   
老毕说内部类继承外部类没用
我就想试试行不行
作者: 清水    时间: 2012-12-21 20:07
内部类继承外部类, 岂不是一个死循环……
作者: 杜天伟    时间: 2012-12-21 23:16
清冰 发表于 2012-12-21 20:07
内部类继承外部类, 岂不是一个死循环……

为什么呢?
作者: 杜天伟    时间: 2012-12-21 23:17
清冰 发表于 2012-12-21 20:07
内部类继承外部类, 岂不是一个死循环……

为什么呢?
作者: 夏晓彤    时间: 2012-12-22 00:14
楼主想什么呢
  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-24 13:52
夏晓彤 发表于 2012-12-22 00:14
楼主想什么呢你写 class in 想干嘛的,我认为根本没意义,调用lili(2)又是想做什么的?想得到什么结果? ...

我只是想试试内部类继承外部类  名字随便起的
作者: 黄锦成    时间: 2012-12-25 11:00
这个类写得挺复杂的,内部类继承外部类{:soso_e125:}
作者: 杜天伟    时间: 2012-12-26 23:55
黄锦成 发表于 2012-12-25 11:00
这个类写得挺复杂的,内部类继承外部类

内部类继承外部类到底可不可以呢
作者: 黄锦成    时间: 2012-12-27 00:52
杜天伟 发表于 2012-12-26 23:55
内部类继承外部类到底可不可以呢

像死循环,你内部类继承外部类,外部类中的内部类有继承外部类,外部类中的内部类有继承外部类,......
就这样一直下去
作者: 杜天伟    时间: 2012-12-27 15:20
黄锦成 发表于 2012-12-27 00:52
像死循环,你内部类继承外部类,外部类中的内部类有继承外部类,外部类中的内部类有继承外部类,......
...

能否编译通过或者运行呢  :loveliness:




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2