黑马程序员技术交流社区

标题: interface问题 [打印本页]

作者: 赵庆礼    时间: 2012-7-5 01:27
标题: interface问题
本帖最后由  赵庆礼 于 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());
    }
}

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

作者: 何旭栋    时间: 2012-7-5 02:50

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());
    }
}

作者: 杨_扬    时间: 2012-7-5 05:00
首先我们来看一下接口的两个特点:
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这个变量的值


作者: 张天天    时间: 2012-7-5 06:25
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 07:31
张天天 发表于 2012-7-5 06:25
package luntantest;

public class Test12 {

你这个说法也不对哦




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