黑马程序员技术交流社区
标题:
java 面试题
[打印本页]
作者:
李琼
时间:
2012-11-7 14:44
标题:
java 面试题
本帖最后由 李琼 于 2012-11-7 19:40 编辑
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());
}
}
复制代码
上述java题有错,本人眼戳,没看出来,求大神
作者:
颜峰
时间:
2012-11-7 15:04
Ball类中没有定义ball变量,说明19行的ball是使用接口中的,接口中的变量默认是static ,final的,不能进行赋值
作者:
jsfjb
时间:
2012-11-7 15:22
接口中成员有固定的修饰符:public static final,这些修饰符会自动补上.
所以在
interface Rollable extends Playable, Bounceable {
Ball ball = new Ball("PingPang");
}
中定义的ball就是常量。不能再子类中,重写定义。
public void play() {
ball = new Ball("Football");
System.out.println(ball.getName());
}
上面的这个方法,是在子类中重写赋值。所以,就会出错。
哈哈哈
这道题,我刚看的时候确实有点绕。
作者:
杨志男
时间:
2012-11-7 15:55
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;
}
//这儿重写的应该是Playable接口的方法
public void play() {
ball = new Ball("Football");//在Ball类中并没有初始化自己的对象,所以这里应该是使用的Rollable接口的ball,而在接口中的变量或者对象都会默认被static和final修饰,是
//不能再次赋予新值的
System.out.println(ball.getName());
}
}
复制代码
作者:
李琼
时间:
2012-11-7 19:40
还是滔哥给力啊。
"interface Rollable extends Playable, Bounceable"没有问题。interface可继承多个interfaces,所以这里没错。问题出在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");"这里显示有错。
结贴吧。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2