Chinaunix首页 | 论坛 | 博客

2CU

  • 博客访问: 26120
  • 博文数量: 7
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 95
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-20 12:56
文章分类

全部博文(7)

文章存档

2011年(1)

2010年(2)

2009年(4)

我的朋友

分类: Java

2009-07-23 13:01:00

关于Java的接口继承的题目:

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

    }

}

指出上面的程序错误的地方,说明原因。

 

答案:

   问题出在interface Rollable里的"Ball ball = new Ball("PingPang");"。

    任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final

    也就是说"Ball ball = new Ball("PingPang")"; 

   实际上是"public static final Ball ball = new Ball("PingPang");"。

   在Ball类的Play()方法中,"ball = new Ball("Football");"

   改变了ball的reference,而这里的ball来自Rollable interface,Rollable interface里的ball是public static final的,

   final的object是不能被改变reference的。因此编译器将在"ball = new Ball("Football");"这里显示有错。

阅读(1409) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~