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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

interface aa
{
        void show();
}

public class Extend implements aa{

        void show() //这里报错
        {
                System.out.println("haha");
        }
       
}
定义了一个接口,Extend 类实现了该接口,那么要复写接口中的所有方法,才能建立对象,不然该类是个抽象类
问题是,为什么上段代码报错,感觉没有任何原因报错啊!!!!!


18 个回复

倒序浏览
void show() //这里报错  原因是 接口下的成员都是public,而你的这个void show()是默认的,子类必须小于或等于父类的访问权限,你加上个public void show()就行了
回复 使用道具 举报

interface aa
{
        void show();//这个只是简写,完整的应该是public abstract void show();
}

public class Extend implements aa{

        void show() //子类在实现接口方法时,方法的权限不能低于public,所以在前面加上public就可以了。
        {
                System.out.println("haha");
        }
        
}
回复 使用道具 举报
本帖最后由 梁耀今 于 2013-3-8 01:23 编辑

你们都没注意,他们这个程序根本就写错了好么?第一没有类名,第二他继承写错了,第三,他权限有问题!
回复 使用道具 举报
张卫刚 发表于 2013-3-8 01:03
void show() //这里报错  原因是 接口下的成员都是public,而你的这个void show()是默认的,子类必须小于或 ...

你这里就理解错了,不是子类必须小于或者等于父类的访问权限,而是父类的访问权限要给子类,如果是默认,那么这里将会被限制!!!
回复 使用道具 举报
接口方法前默认修饰符是  public abstract    子类覆盖时  方法的访问权限必须 大于等于父类或实现的接口的方法访问权限   所以要加  public修饰才行
回复 使用道具 举报
黑马李超 发表于 2013-3-8 01:08
interface aa
{
        void show();//这个只是简写,完整的应该是public abstract void show();

人家错了,你也跟着错!唉!!!!
回复 使用道具 举报
门文通 发表于 2013-3-8 01:19
接口方法前默认修饰符是  public abstract    子类覆盖时  方法的访问权限必须 大于等于父类或实现的接口的 ...

他还有一个错的地方,就没人发现???
回复 使用道具 举报
梁耀今 发表于 2013-3-8 01:17
你这里就理解错了,不是子类必须小于或者等于父类的访问权限,而是父类的访问权限要给子类,如果是默认, ...

接口方法有默认权限 public abstract ,不写默认是这两个修饰符,所以时间接口必须实现方法,实现的方法必须是public 在普通类里 你的理解是对的 ,还有抽象类也有默认权限
回复 使用道具 举报
本帖最后由 门文通 于 2013-3-8 01:46 编辑
梁耀今 发表于 2013-3-8 01:26
他还有一个错的地方,就没人发现???

呵呵  是错了  只看他问的了  别的没注意   不是主类 类名前不要加public   
回复 使用道具 举报
门文通 发表于 2013-3-8 01:44
呵呵  是错了  只看他问的了  别的没注意   不是主类 类名前不要加public

不是,是他子类连类名都没有,还有继承英文也写错,更严重的是,这不是继承,而是要去实现,他直接就写extend。我汗!!!
回复 使用道具 举报
梁耀今 发表于 2013-3-8 01:52
不是,是他子类连类名都没有,还有继承英文也写错,更严重的是,这不是继承,而是要去实现,他直接就写ex ...

他应该是吧 Extend 作为类名  后面有 实现接口的 词 implements    所以是OK的   Extend不是关键字  可以作为类名   extends  才是关键字
回复 使用道具 举报
门文通 发表于 2013-3-8 01:44
呵呵  是错了  只看他问的了  别的没注意   不是主类 类名前不要加public

为什么?
其实只是建议不写public吧,这个谈不上错吧,就像main的参数(String[] abc)这样写也可以
只是我们建议(String[] args)
回复 使用道具 举报
梁耀今 发表于 2013-3-8 01:52
不是,是他子类连类名都没有,还有继承英文也写错,更严重的是,这不是继承,而是要去实现,他直接就写ex ...

大哥Extend是类名。。。。。。。
回复 使用道具 举报
韩松范 发表于 2013-3-8 02:04
为什么?
其实只是建议不写public吧,这个谈不上错吧,就像main的参数(String[] abc)这样写也可以
只是我 ...

不是这样滴    文件名要和public修饰的类名相同  通常主类采用public修饰  这样文件名就和主类一样了  但如果你  给主类和 其他类都用public修饰了  你运行下代码试试  报不报错   如果其他类需要public修饰怎么办  简单  再开个文件 写进去  和主类不在一个文件就OK了
回复 使用道具 举报
门文通 发表于 2013-3-8 02:18
不是这样滴    文件名要和public修饰的类名相同  通常主类采用public修饰  这样文件名就和主类一样了  但 ...

哈哈,我这个就是用两个类分别写的,我说ecllipse不报错呢。
但是你说的这个以前还真没注意过,学习了。。
回复 使用道具 举报
韩松范 发表于 2013-3-8 02:22
哈哈,我这个就是用两个类分别写的,我说ecllipse不报错呢。
但是你说的这个以前还真没注意过,学习了。 ...

呵呵  我还是在用editplus的阶段  互相学习
回复 使用道具 举报
本帖最后由 张洪慊 于 2013-3-8 08:13 编辑

interface aa
{
        void show();//别忘了接口中方法的默认权限是public abstract
}

public class Extend implements aa{

        void show()//这里权限是默认权限
        {           //在继承中,子类方法要想复写父类,子类方法权限必须>=父类权限
                //因此加上public
                System.out.println("haha");
        }
        
}
回复 使用道具 举报
复制代码
  1. interface aa
  2. {
  3. public abstract void show();
  4. }

  5. public class Extend implements aa{

  6. public void show()
  7. {
  8. System.out.println("haha");
  9. }

  10. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马