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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹操 黑马帝   /  2012-8-30 00:14  /  1639 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这代码有错吗?错在哪里?
  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. }
复制代码

4 个回复

倒序浏览
本帖最后由 冯心程 于 2012-8-30 00:58 编辑

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


回复 使用道具 举报
Ball ball = new Ball("Football");//19行这里少了类型声明
虽然Playable, Bounceable两个接口都有play()方法,但是由于接口里面的方法都是抽象的,不存在调用接口方法的问题,所以子类Ball在实现接口时,可以直接覆盖play()方法,编译器不关心子类究竟覆盖的是哪个接口的play()方法。
回复 使用道具 举报
  • interface Rollable extends Playable, Bounceable {
  •     Ball ball = new Ball("PingPang");
  • }
我是这样想的,不知道对不对,接口中的成员都有固定修饰符public static final,由于是静态的原因,毕竟Ball实现了Rollable接口得先加载Rollable,这时很可能在Ball = new Ball("pingpang");时 Ball这个类还没有完全载入。
回复 使用道具 举报
主要是楼主代码要干嘛?

目测少了ball类型而报错。
  1. public void play() {
  2.                 //ball = new Ball("Football");
  3.                 Ball ball = new Ball("Football");
  4.                 System.out.println(ball.getName());
  5.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马