黑马程序员技术交流社区

标题: 这。。。哪错了。。为啥? [打印本页]

作者: 王玮    时间: 2012-12-29 20:47
标题: 这。。。哪错了。。为啥?
本帖最后由 王玮 于 2012-12-29 20:50 编辑
  1. interface Playable {
  2. void play();
  3. }
  4. interface Bounceable {
  5. void play();
  6. }
  7. interface Rollable extends Playable, Bounceable {
  8. Ball ball = new Ball("PingPang");
  9. }
  10. class Ball implements Rollable {
  11. private String name;
  12. public String getName() {
  13. return name;
  14. }
  15. public Ball(String name) {
  16. this.name = name;
  17. }
  18. public void play() {
  19. ball = new Ball("Football");
  20. System.out.println(ball.getName());
  21. }
  22. }
复制代码

作者: 何伟    时间: 2012-12-29 20:57
接口里只能有常量和抽象方法
作者: 刘丰伟    时间: 2012-12-29 20:59
java不支持多继承,只支持多实现,(07.interface Rollable extends Playable, Bounceable {

08.Ball ball = new Ball("PingPang");

})
作者: 王玮    时间: 2012-12-29 21:00
刘丰伟 发表于 2012-12-29 20:59
java不支持多继承,只支持多实现,(07.interface Rollable extends Playable, Bounceable {

08.Ball bal ...

好像支持 接口多继承,这句应该没错。
作者: 肖志锋    时间: 2012-12-29 21:13
本帖最后由 肖志锋 于 2012-12-29 21:15 编辑

你在第19行错了,你不应该再去给常量赋值的。
理由:在接口中的要不是public absrtract 修饰的抽象方法,抽象方法就不解释了;另一个是 public static final修饰的常量,这个不能2次赋值,而且必须马上赋值,所以第8行就是做的这个工作。还有第3个成员,不过我给忘记了,我就不说了,呵呵
你就算不写这些修饰符,虚拟机也会帮你加上去的,所以为了自己方便最好自己写代码的时候添加上去。



作者: 刘丰伟    时间: 2012-12-29 22:52
王玮 发表于 2012-12-29 21:00
好像支持 接口多继承,这句应该没错。

额,刚才在网上查了下,又结合毕老师说的,java之所以不能多继承是因为如果可以继承多个父类,并且父类中有相同方法时,子类不知道该调用哪个,但是接口里面的方法是抽象的,必须复写,不会出现不知道该继承哪个的情况!
作者: 清水    时间: 2012-12-30 17:52
本帖最后由 清冰 于 2012-12-30 17:53 编辑

额,还有个问题。
下面的代码。你在Rollable里面创建了Ball对象,但你的Ball类又要实现Rollable接口,这不是一个死循环么?
  1. interface Rollable extends Playable, Bounceable {
  2.         Ball ball = new Ball("PingPang");
  3. }

  4. class Ball implements Rollable {
  5.         private String name;

  6.         public String getName() {
  7.                 return name;
  8.         }

  9.         public Ball(String name) {
  10.                 this.name = name;
  11.         }

  12.         public void play() {
  13.                 ball = new Ball("Football");
  14.                 System.out.println(ball.getName());
  15.         }
  16. }
复制代码

作者: 王玮    时间: 2013-1-1 17:33
肖志锋 发表于 2012-12-29 21:13
你在第19行错了,你不应该再去给常量赋值的。
理由:在接口中的要不是public absrtract 修饰的抽象方法,抽 ...

thank you ~~~~~~~
作者: 何竹冬    时间: 2013-1-3 15:20
你好
TestInet.java:32: 无法为最终变量 ball 指定值
ball = new Ball("Football");
^
1 错误

通过错误提示很明显可以看出你在给一个final最终变量赋值。
呵呵,查看错误提示很容易找到问题所在。






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