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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李阳阳 中级黑马   /  2013-3-15 20:03  /  1884 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 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, 下载次数: 24)

未命是名.jpg

点评

一定要对别人的回答给出相应的回复哦,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-15 22:17

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
你的匿名内部类实现的是接口,接口中的抽象方法默认的权限修饰符是public,所以你匿名内部类重写方法的时候要加上public修饰,也就是改为public void show();这样你的代码就能运行了!输出的结果就是Haaaaa,不知你写了多少个a!!这样说你理解了吧!!!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  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就能解决问题勒。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
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,要不然权限不够,权限要大于等于接口的权限

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
在接口中变量是需要public static final修饰的,而对于接口中的方法全部是用public abstract 修饰的。当你匿名内部类覆写show方法的时候,要注意权限的问题,也就是匿名内部类中的show方法的访问权限要大于或者等于接口中抽象方法show的权限。
但是由于接口中的方法都是public修饰的,所以匿名内部类中的show只有用public修饰了(别的权限没的选了),所以应该是public void show(){};不应该是void show(){} (默认的权限小于public权限)

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
{:soso_e115:}楼上几位回答的很到位了,凡是实现接口中的方法访问权限都是public
回复 使用道具 举报
黑马-郑玉元 发表于 2013-3-15 20:18
你的匿名内部类实现的是接口,接口中的抽象方法默认的权限修饰符是public,所以你匿名内部类重写方法的时候 ...

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

明白了谢谢、
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马