黑马程序员技术交流社区

标题: 还有一段代码也是编译报错,但是不知道为什么 [打印本页]

作者: 李跃达    时间: 2013-1-30 14:51
标题: 还有一段代码也是编译报错,但是不知道为什么
就是一个很简单的接口多继承的例子
  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");//这里报错,写Ball ball=new Ball("Football")也出问题,什么错误
  20. System.out.println(ball.getName());
  21. }
  22. }
复制代码

作者: 黑马张英涛    时间: 2013-1-30 15:06
interface Rollable extends Playable, Bounceable {
Ball ball = new Ball("PingPang");
}
这个接口中你定义了一个成员变量。但是由于是在接口中,所有成员变量默认都是静态常量,
只是给你省略了public static final 。
所以实际上是 public static final Ball ball=new Ball("PingPang");
下面的代码中你试图让这个常量指向一个新的引用,所以报错了。
作者: 王少雷    时间: 2013-1-30 15:14
这些代码,是在一个类中写的吧?应该是内部类。。。
内部类,你不创建外部实例再去调用 是不行的,你可以创建外部类实例再调用内部实例对象。

new 外().new 内();
作者: 黄成超    时间: 2013-1-30 15:47
首先,任意在接口定义的变量默认为public static final,所以开始的时候你在public void play()方法中不能够改变ball的属性值,更不能重新创建ball对象啦!所以肯定会出错的。




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