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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Joyuang 黑马帝   /  2012-1-31 19:28  /  2179 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钱兆元 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

5 个回复

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

明白了,多谢
回复 使用道具 举报
钱兆元 发表于 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");
所以编译出错。
回复 使用道具 举报
陈浩 来自手机 黑马帝 2012-1-31 20:23:17
板凳
我调试了一下你程序,错误是Final 类型的数据不可以被赋值,也就是说你在接口Rollable 中定义的ball对象默认是Final 修饰的,因此你在类Ball 的play方法中重新为ball赋值是非法的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
多谢刘老师,是不是这个样子
public static final Ball ball = new Ball("PingPang");
所以错了
回复 使用道具 举报
interface中:
变量,默认修饰为:public static final
方法,默认修饰为:public abstract

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马