黑马程序员技术交流社区

标题: 关于匿名内部类的名字? [打印本页]

作者: 抽烟男孩    时间: 2013-4-15 08:35
标题: 关于匿名内部类的名字?
本帖最后由 抽烟男孩 于 2013-4-15 13:26 编辑

我在Test类中定义匿名outer类,在java虚拟机中匿名类的名字是什么?
  1. class Out{
  2. void show(){
  3. System.out.println("this is Out class.");
  4. }
  5. }
  6. public class Test{
  7. public static void main(String args[]){
  8. Test test=new Test();
  9. test.show();
  10. }
  11. //在这个方法中构造了一个匿名内部类
  12. private void show(){
  13. Out anonyInter=new Out(){// 获取匿名内部类实例

  14. void show(){//重写父类的方法
  15. System.out.println("I want to know my name");
  16. }
  17. };
  18. anonyInter.show();// 调用其方法
  19. }
  20. }
复制代码

作者: 林声荣    时间: 2013-4-15 08:58
兄台,你这句代码:"13.Out anonyInter=new Out(){// 获取匿名内部类实例"应该不是创建的匿名类对象吧,只是单单创建一个父类Out的对象吧,因为Out类只是一个普通类,匿名类一般是继承和实现一个接口,然后根据需要覆写方法;  匿名内部类的格式:new 父类或者接口(){定义子类的内容},匿名类其实就是匿名子类的对象,至于“在java虚拟机中匿名类的名字是什么”我就不晓得了、、


作者: 通行天下    时间: 2013-4-15 09:25
本帖最后由 通行天下 于 2013-4-15 09:36 编辑
  1. /*        
  2. 匿名内部类:
  3. 1,匿名内部类其实就是内部类的简写格式。
  4. 2,定义匿名内部类的前提:
  5.         内部类必须是继承一个类或者实现接口。
  6. 3,匿名内部类的格式:  new 父类或者接口(){定义子类的内容}
  7. 4,其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖,可以理解为带内容的对象。
  8. 5,匿名内部类中定义的方法最好不要超过3个。
  9. */
  10. abstract class AbsDemo
  11. {
  12.         abstract void show();
  13.         
  14. }

  15. class Outer
  16. {
  17.         int x = 3;

  18.         /*
  19.          //这个只是普通的内部类
  20.         class Inner extends AbsDemo
  21.         {
  22.                 int num = 90;
  23.                 void show()
  24.                 {
  25.                         System.out.println("show :"+num);
  26.                 }
  27.                 void abc()
  28.                 {
  29.                         System.out.println("hehe");
  30.                 }
  31.         }
  32.         */

  33.         public void function()
  34.         {
  35.                //下面这个就是匿名内部类啦!!
  36.                 AbsDemo d = new AbsDemo()   //这句就存在多态!!!
  37.                 {
  38.                         int num = 9;
  39.                         //复写show()方法
  40.                         void show()
  41.                         {
  42.                                 System.out.println("num==="+num);
  43.                         }
  44.                         //子类还有自己的方法abc()。
  45.                         void abc()
  46.                         {
  47.                                 System.out.println("haha");
  48.                         }
  49.                 };     //千万要记住加这个";"啊!!!

  50.                 d.show();
  51.                 //d.abc();//编译失败,因为多态中编译看左边,父类中没有abc()这个方法,故会失败。

  52.                



  53.         }
  54. }



  55. class InnerClassDemo4
  56. {
  57.         public static void main(String[] args)
  58.         {
  59.                 new Outer().function();
  60.         }
  61. }


  62. 看懂这个例子,你就能明白啦!
复制代码





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