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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨习平 中级黑马   /  2012-9-2 22:18  /  2283 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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());
    }
}
不知道哪错了  帮帮忙把

评分

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

查看全部评分

9 个回复

倒序浏览
Ball ball = new Ball("PingPang");
这个是接口内部的 接口内部的变量默认用public static final 修饰
它实际上是 public static final Ball ball = new Ball("PingPang");
所以ball的值是不能再变成Football的

评分

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

查看全部评分

回复 使用道具 举报
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 ball=new Ball("Football");
        System.out.println(ball.getName());
    }
}
回复 使用道具 举报
interface 里定义的属性是终态常量,会被自动的加上public static final修饰符;Ball ball = new Ball("PingPang");是在Rollable接口里定义的,所以在Ball类里就不能对ball赋值,如果定义的是引用类型,可以改变引用的内容,比如,ball.name = "Football";
回复 使用道具 举报
public void play() {
Ball   ball = new Ball("Football");
        System.out.println(ball.getName());
    }
还可以更细心点
回复 使用道具 举报
首先,这段代码就是错的,一个类只能有一个父类,同时集成两个父类,java是不允许的
interface Rollable extends Playable, Bounceable {
    Ball ball = new Ball("PingPang");
}

其实,继承一个借口,就必须复写父借口的抽象方法

再者这段代码里.创建一个对象应该是用Ball ball = new Ball("PingPang");
public void play() {
         ball = new Ball("Football");
         System.out.println(ball.getName());
     }

点评

继承是可以多实现的,接口继承接口时,不一定要重写父接口里的方法。您可以在程序中试一下!  发表于 2012-9-2 23:28
回复 使用道具 举报
interface Playable {
        void play();
}

interface Bounceable {
        void play();
}

interface Rollable extends Playable, Bounceable {
        Ball ball = new Ball("PingPang");//接口中的全部为常量所以publicstatic final Ball ball = new Ball("PingPang"); 简化成 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-9-2 22:53
首先,这段代码就是错的,一个类只能有一个父类,同时集成两个父类,java是不允许的
interface Rollable extend ...

一个类只能有一个父类,但是可以实现有一个或多个接口!这也是java多态性的一种体现~
回复 使用道具 举报
public void play() {
        ball = new Ball("Football");
        System.out.println(ball.getName());
    }
此处:ball是一个对象引用【Ball ball = new Ball("PingPang");】,如果要给以一个对象引用赋值,可以是另一个对象的内存地址(此时不必加Ball),如果使用了new Ball("Football");

这相当于新建了一个对象,必须要加 Ball 。不知道回答的是你是否满意!
回复 使用道具 举报
武庆东 发表于 2012-9-2 23:13
一个类只能有一个父类,但是可以实现有一个或多个接口!这也是java多态性的一种体现~
...

实现必须使用关键字inplements,而不是extends
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马