黑马程序员技术交流社区

标题: 这段代码错在哪里? [打印本页]

作者: Joyuang    时间: 2012-1-31 19:28
标题: 这段代码错在哪里?
本帖最后由 钱兆元 于 2012-1-31 20:44 编辑

下面这段代码哪里错了?求教
  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-1-31 19:53
interface中:
变量,默认修饰为:public static final
方法,默认修饰为:public abstract
作者: Joyuang    时间: 2012-1-31 20:09
多谢刘老师,是不是这个样子
public static final Ball ball = new Ball("PingPang");
所以错了
作者: 陈浩    时间: 2012-1-31 20:23
我调试了一下你程序,错误是Final 类型的数据不可以被赋值,也就是说你在接口Rollable 中定义的ball对象默认是Final 修饰的,因此你在类Ball 的play方法中重新为ball赋值是非法的。
作者: 刘基军    时间: 2012-1-31 20:26
钱兆元 发表于 2012-1-31 20:09
多谢刘老师,是不是这个样子
public static final Ball ball = new Ball("PingPang");
所以错了 ...

呵呵,我也是初学,受不起丫
final修饰后的变量,其指向是固定的,即常量,不可以再使其重新指向新的对象。
你看,ball这边已经指向了叫“PingPang”的Ball对象:
interface Rollable extends Playable, Bounceable {
    Ball ball = new Ball("PingPang");
}
而这边,你又将其指向新的“Football”的Ball对象:
ball = new Ball("Football");
所以编译出错。

作者: Joyuang    时间: 2012-1-31 20:27
刘基军 发表于 2012-1-31 20:26
呵呵,我也是初学,受不起丫
final修饰后的变量,其指向是固定的,即常量,不可以再使其重新指向新的对象 ...

明白了,多谢




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