java接口繼承的題目

關於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");"這裏顯示有錯。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章