黑马程序员技术交流社区

标题: 匿名内部类的问题、、 [打印本页]

作者: 李阳阳    时间: 2013-3-15 20:03
标题: 匿名内部类的问题、、
本帖最后由 黄玉昆 于 2013-3-16 08:13 编辑
  1. interface Inter
  2. {
  3.          abstract void show();
  4. }
  5. class Outer
  6. {
  7.          public void method()
  8.          {
  9.                          new Inter()
  10.                                      {
  11.                                                     void show()
  12.                                                           {
  13.                                                                         System.out.println("Haaaaaaa");
  14.                                                           }
  15.                                        }.show();
  16.           }
  17.         
  18. }
  19. class  InnerClassDemo5
  20. {
  21.            public static void main(String[] args)
  22.                      {
  23.                                   new Outer().method();
  24.                      }
  25. }
复制代码
运行结果是这样,是不是那个地方写错啦、


未命是名.jpg (25.34 KB, 下载次数: 18)

未命是名.jpg

作者: 黑马-郑玉元    时间: 2013-3-15 20:18
你的匿名内部类实现的是接口,接口中的抽象方法默认的权限修饰符是public,所以你匿名内部类重写方法的时候要加上public修饰,也就是改为public void show();这样你的代码就能运行了!输出的结果就是Haaaaa,不知你写了多少个a!!这样说你理解了吧!!!
作者: blackcaismine    时间: 2013-3-15 20:26
  1. interface Inter
  2. {
  3.         abstract void show();
  4. }
  5. class Outer
  6. {
  7.         public void method()
  8.         {
  9.                 new Inter()
  10.                 {
  11.                         public void show()
  12.                         {
  13.                                 System.out.println("Haaaaaaa");
  14.                         }
  15.                         }.show();
  16.                 }
  17.         
  18. }
  19. class  InnerClassDemo5
  20. {
  21.                 public static void main(String[] args)
  22.         {
  23.                 new Outer().method();
  24.         }
  25. }
复制代码
改成这样就可以啦,主要是因为你在实现接口的时候权限不够,在void show()前用public就能解决问题勒。
作者: 沈子豪    时间: 2013-3-15 20:47
interface Inter
{
         abstract void show();
}
class Outer
{
         public void method()
         {
                         new Inter()
                                     {
                                                   public void show()
                                                          {
                                                                        System.out.println("Haaaaaaa");
                                                          }
                                       }.show();
          }
        
}
class  InnerClassDemo5
{
           public static void main(String[] args)
                     {
                                  new Outer().method();
                     }
}
void show()前面加上public,匿名内部类重写方法的时候要加上public,要不然权限不够,权限要大于等于接口的权限

作者: HM赵磊    时间: 2013-3-15 21:17
在接口中变量是需要public static final修饰的,而对于接口中的方法全部是用public abstract 修饰的。当你匿名内部类覆写show方法的时候,要注意权限的问题,也就是匿名内部类中的show方法的访问权限要大于或者等于接口中抽象方法show的权限。
但是由于接口中的方法都是public修饰的,所以匿名内部类中的show只有用public修饰了(别的权限没的选了),所以应该是public void show(){};不应该是void show(){} (默认的权限小于public权限)
作者: 范天成    时间: 2013-3-15 21:36
{:soso_e115:}楼上几位回答的很到位了,凡是实现接口中的方法访问权限都是public
作者: 李阳阳    时间: 2013-3-17 13:45
黑马-郑玉元 发表于 2013-3-15 20:18
你的匿名内部类实现的是接口,接口中的抽象方法默认的权限修饰符是public,所以你匿名内部类重写方法的时候 ...

看视频的时候,毕老师好像也没写啊,也没出现错误啊,为什么、
作者: 李阳阳    时间: 2013-3-17 13:48
csatshell 发表于 2013-3-15 21:17
在接口中变量是需要public static final修饰的,而对于接口中的方法全部是用public abstract 修饰的。当你 ...

明白了谢谢、




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