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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵庆礼 中级黑马   /  2012-7-5 01:27  /  2081 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由  赵庆礼 于 2012-7-5 11:45 编辑

interface Playable {
    void play();
}
interface Bounceable {
    void play();
}
interface Rollable extends Playable, Bounceable {
    Ball ball = new Ball("PingPang");
}
class Ball implements Rollable {
    private String name;
    public String getName() {
        return name;
    }
    public Ball(String name) {
        this.name = name;        
    }
   public void play() {
        ball = new Ball("Football");
        System.out.println(ball.getName());
    }
}

请问哪里错了,一直找不到,哪位帮我解释一下。谢谢

4 个回复

倒序浏览

interface Playable {
    void play();
}
interface Bounceable {
    void play();
}
interface Rollable extends Playable, Bounceable {
    Ball ball = new Ball("PingPang");
}
class Ball implements Rollable {
    private String name;
    public String getName() {
        return name;
    }
    public Ball(String name) {
        this.name = name;        
    }
   public void play() {
       ball = new Ball("Football"); //我觉得应该这里出错了,ball是interface中定义的,接口中的成员变量都是最终类型,值不能变
        System.out.println(ball.getName());
    }
}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
首先我们来看一下接口的两个特点:
1. 接口中的函数都是public的,不论写不写明,所以在实现时,也必须加上public修饰。
2. 接口中可以定义变量(常量),默认是static final型,所以必须初始化。
interface Rollable extends Playable, Bounceable {
    Ball ball = new Ball("PingPang");
}
你在这个接口中已经定义了ball这个变量,那么实际上ball这个变量就是 static final的
而你在类Ball中实现接口的方法时,试图改变ball的值,那编译器必然报错
将ball = new Ball("Football"); 改为 Ball ball = new Ball("Football");就可以了
此时,函数体内完成的是对新的局部变量ball的初始化,而不是改变从接口中继承的static final的ball这个变量的值

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
package luntantest;

public class Test12 {

}
interface Playable {
    void play();
}
interface Bounceable {
    void play();
}
interface Rollable extends Playable, Bounceable {
    Ball ball = new Ball("PingPang");
}
class Ball implements Rollable {
    private String name;
    public String getName() {
        return name;
    }
    public Ball(String name) {
        this.name = name;        
    }
   public void play() {
      Ball  ball = new Ball("Football");//把这里的类型给出来就不会出错了啊
        System.out.println(ball.getName());
    }
}
接口中可以定义变量(常量),默认是static final型,所以必须初始化。
如果是Ball ball = new Ball("gggg");就是新的对象了然而
ball = new  Ball("gggg");是吧原来的ball对象重新赋值和final矛盾了
回复 使用道具 举报
张天天 发表于 2012-7-5 06:25
package luntantest;

public class Test12 {

你这个说法也不对哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马