黑马程序员技术交流社区

标题: 帮帮忙解决interface和继承之间问题 [打印本页]

作者: 杨习平    时间: 2012-9-2 22:18
标题: 帮帮忙解决interface和继承之间问题
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-9-2 22:32
Ball ball = new Ball("PingPang");
这个是接口内部的 接口内部的变量默认用public static final 修饰
它实际上是 public static final Ball ball = new Ball("PingPang");
所以ball的值是不能再变成Football的

作者: 孙铭泽    时间: 2012-9-2 22:36
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());
    }
}
作者: 袁艳超    时间: 2012-9-2 22:47
interface 里定义的属性是终态常量,会被自动的加上public static final修饰符;Ball ball = new Ball("PingPang");是在Rollable接口里定义的,所以在Ball类里就不能对ball赋值,如果定义的是引用类型,可以改变引用的内容,比如,ball.name = "Football";

作者: 武庆东    时间: 2012-9-2 22:50
public void play() {
Ball   ball = new Ball("Football");
        System.out.println(ball.getName());
    }
还可以更细心点
作者: 王金科    时间: 2012-9-2 22:53
首先,这段代码就是错的,一个类只能有一个父类,同时集成两个父类,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 22:59
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 23:13
王金科 发表于 2012-9-2 22:53
首先,这段代码就是错的,一个类只能有一个父类,同时集成两个父类,java是不允许的
interface Rollable extend ...

一个类只能有一个父类,但是可以实现有一个或多个接口!这也是java多态性的一种体现~

作者: 赵家阳    时间: 2012-9-2 23:22
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:24
武庆东 发表于 2012-9-2 23:13
一个类只能有一个父类,但是可以实现有一个或多个接口!这也是java多态性的一种体现~
...

实现必须使用关键字inplements,而不是extends




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