黑马程序员技术交流社区

标题: 各位看看,关于这代码错误的问题 [打印本页]

作者: 曹操    时间: 2012-8-30 00:14
标题: 各位看看,关于这代码错误的问题
这代码有错吗?错在哪里?
  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. }
复制代码

作者: 冯心程    时间: 2012-8-30 00:57
本帖最后由 冯心程 于 2012-8-30 00:58 编辑

第八行:Ball ball = new Ball("PingPang");
这个是接口内部的 接口内部的变量默认用public static final 修饰
它实际上是 public static final Ball ball = new Ball("PingPang");
所以ball的值是不能在第19行中改变的



作者: 赵云柯    时间: 2012-8-30 01:04
Ball ball = new Ball("Football");//19行这里少了类型声明
虽然Playable, Bounceable两个接口都有play()方法,但是由于接口里面的方法都是抽象的,不存在调用接口方法的问题,所以子类Ball在实现接口时,可以直接覆盖play()方法,编译器不关心子类究竟覆盖的是哪个接口的play()方法。
作者: 黑马张旭明    时间: 2012-8-30 01:05
我是这样想的,不知道对不对,接口中的成员都有固定修饰符public static final,由于是静态的原因,毕竟Ball实现了Rollable接口得先加载Rollable,这时很可能在Ball = new Ball("pingpang");时 Ball这个类还没有完全载入。

作者: 寇龙飞    时间: 2012-8-30 01:11
主要是楼主代码要干嘛?

目测少了ball类型而报错。
  1. public void play() {
  2.                 //ball = new Ball("Football");
  3.                 Ball ball = new Ball("Football");
  4.                 System.out.println(ball.getName());
  5.         }
复制代码





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