黑马程序员技术交流社区

标题: 关于实现接口,这段代码报错,原因是什么???/ [打印本页]

作者: 移动小坦克    时间: 2013-3-8 00:54
标题: 关于实现接口,这段代码报错,原因是什么???/
interface aa
{
        void show();
}

public class Extend implements aa{

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



作者: 张卫刚    时间: 2013-3-8 01:03
void show() //这里报错  原因是 接口下的成员都是public,而你的这个void show()是默认的,子类必须小于或等于父类的访问权限,你加上个public void show()就行了
作者: 黑马李超    时间: 2013-3-8 01:08

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:15
本帖最后由 梁耀今 于 2013-3-8 01:23 编辑

你们都没注意,他们这个程序根本就写错了好么?第一没有类名,第二他继承写错了,第三,他权限有问题!

作者: 梁耀今    时间: 2013-3-8 01:17
张卫刚 发表于 2013-3-8 01:03
void show() //这里报错  原因是 接口下的成员都是public,而你的这个void show()是默认的,子类必须小于或 ...

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

人家错了,你也跟着错!唉!!!!
作者: 梁耀今    时间: 2013-3-8 01:26
门文通 发表于 2013-3-8 01:19
接口方法前默认修饰符是  public abstract    子类覆盖时  方法的访问权限必须 大于等于父类或实现的接口的 ...

他还有一个错的地方,就没人发现???
作者: 夏振博    时间: 2013-3-8 01:27
梁耀今 发表于 2013-3-8 01:17
你这里就理解错了,不是子类必须小于或者等于父类的访问权限,而是父类的访问权限要给子类,如果是默认, ...

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

呵呵  是错了  只看他问的了  别的没注意   不是主类 类名前不要加public   
作者: 梁耀今    时间: 2013-3-8 01:52
门文通 发表于 2013-3-8 01:44
呵呵  是错了  只看他问的了  别的没注意   不是主类 类名前不要加public

不是,是他子类连类名都没有,还有继承英文也写错,更严重的是,这不是继承,而是要去实现,他直接就写extend。我汗!!!
作者: amen0205    时间: 2013-3-8 01:55
梁耀今 发表于 2013-3-8 01:52
不是,是他子类连类名都没有,还有继承英文也写错,更严重的是,这不是继承,而是要去实现,他直接就写ex ...

他应该是吧 Extend 作为类名  后面有 实现接口的 词 implements    所以是OK的   Extend不是关键字  可以作为类名   extends  才是关键字
作者: 移动小坦克    时间: 2013-3-8 02:04
门文通 发表于 2013-3-8 01:44
呵呵  是错了  只看他问的了  别的没注意   不是主类 类名前不要加public

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

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

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

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

呵呵  我还是在用editplus的阶段  互相学习
作者: 张洪慊    时间: 2013-3-8 08:12
本帖最后由 张洪慊 于 2013-3-8 08:13 编辑

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

public class Extend implements aa{

        void show()//这里权限是默认权限
        {           //在继承中,子类方法要想复写父类,子类方法权限必须>=父类权限
                //因此加上public
                System.out.println("haha");
        }
        
}

作者: 丁强强    时间: 2013-3-8 08:34
复制代码
  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. }
复制代码





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