黑马程序员技术交流社区

标题: 关于使用内部类。。。。 [打印本页]

作者: 张旺达    时间: 2013-5-26 20:36
标题: 关于使用内部类。。。。
本帖最后由 张旺达 于 2013-5-26 21:34 编辑

最近看了内部类的部分,发现一个问题:

既然内部类是外部类的成员,那么是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类??{:soso_e134:}
作者: 王靖远    时间: 2013-5-26 20:53
楼主想说子类能否继承并重写父类中的内部类吗?
作者: 王靖远    时间: 2013-5-26 20:56
这个问题蛮好的。写代码验证去。
作者: 王靖远    时间: 2013-5-26 21:16
  1. <blockquote>package com.debug;
复制代码
结果是
Outer....show
Inner....run
Outer....show
ZiInner.........run
  1. class Outter
  2. {
  3.        
  4.         public void show()
  5.         {
  6.                 System.out.println("Outer....show");
  7.         }
  8.         class Inner
  9.         {
  10.                 public void run()
  11.                 {
  12.                         System.out.println("Inner....run");
  13.                 }
  14.         }
  15. }

  16. class Zi extends Outter
  17. {
  18.        
  19.        
  20.         class Inner
  21.         {
  22.                
  23.         }
  24.        
  25.        
  26. }

  27. class YanZhengInner
  28. {
  29.         public static void main(String[] args)
  30.         {
  31.                 new Outter().show();
  32.                 new Outter().new Inner().run();
  33.                 new Zi().show();
  34.                 new Zi().new Inner().run();
  35.                
  36.         }
  37. }
复制代码
结果是:

编译失败。Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method run() is undefined for the type Zi.Inner
at com.debug.YanZhengInner.main(YanZhengInner.java:37)

结论是:
子类可以继承外部类成员,但是不能继承内部类成员。想要有同样功能必须自己写,但是不能说是复写。



作者: 王靖远    时间: 2013-5-26 21:18
  1. package com.debug;
  2. class Outter
  3. {
  4.        
  5.         public void show()
  6.         {
  7.                 System.out.println("Outer....show");
  8.         }
  9.         class Inner
  10.         {
  11.                 public void run()
  12.                 {
  13.                         System.out.println("Inner....run");
  14.                 }
  15.         }
  16. }

  17. class Zi extends Outter
  18. {
  19.        
  20.        
  21.         class Inner
  22.         {
  23.                 public void run()
  24.                 {
  25.                         System.out.println("ZiInner.........run");
  26.                 }
  27.         }
  28.        
  29.        
  30. }

  31. class YanZhengInner
  32. {
  33.         public static void main(String[] args)
  34.         {
  35.                 new Outter().show();
  36.                 new Outter().new Inner().run();
  37.                 new Zi().show();
  38.                 new Zi().new Inner().run();
  39.                
  40.         }
  41. }
复制代码
结果
Outer....show
Inner....run
Outer....show
ZiInner.........run

作者: 韩明海    时间: 2013-5-26 21:18
  1. class MyclassOut
  2. {
  3.         //外部类中定义一个字符串并初始化
  4.          String str        = "hello java out";
  5.        
  6.         //定义一个方法,让外部类调用内部类的输出方法
  7.         public void test()
  8.         {
  9.                 (new MyclassIn()).mytest();
  10.         }
  11.         class MyclassIn
  12.         {
  13.                 //定义一个和外部类同名的字符串并初始化一个不同于外部类的值
  14.             String str        = "ok in";
  15.                
  16.             //分别输出内部类和外部类的str的值
  17.                 public void mytest()
  18.                 {
  19.                         System.out.println(str);
  20.                         System.out.println(MyclassOut.this.str);
  21.                 }
  22.         }
  23. }
  24. class son extends MyclassOut
  25. {
  26.         String str        = "hello java son";
  27.         public void test()
  28.         {
  29.                 (new MyclassIn()).mytest();
  30.         }
  31.         class MyclassIn
  32.         {
  33.                 //定义一个和外部类同名的字符串并初始化一个不同于外部类的值
  34.             String str        = "son ok in";
  35.                
  36.             //分别输出内部类和外部类的str的值
  37.                 public void mytest()
  38.                 {
  39.                         System.out.println("------------1--------------");
  40.                         System.out.println(str);
  41.                         System.out.println(son.this.str);
  42.                         System.out.println(son.super.str);
  43.                         System.out.println("-----------2---------------");
  44.                         son.super.test();
  45.                 }
  46.         }
  47. }
  48. public class Test7
  49. {
  50.         public static void main(String[] ages)
  51.         {
  52.                 son testClass        = new son();
  53.                
  54.                 testClass.test();
  55.         }
  56. }
复制代码
不知道是不是你说的意思
作者: 王靖远    时间: 2013-5-26 21:18
王靖远 发表于 2013-5-26 21:18
结果
Outer....show
Inner....run

补充上一楼挂掉的代码
作者: 韩明海    时间: 2013-5-26 21:19
  1. ------------1--------------
  2. son ok in
  3. hello java son
  4. hello java out
  5. -----------2---------------
  6. ok in
  7. hello java out
复制代码
这是输出结果,刚才忘加了




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