黑马程序员技术交流社区
标题:
还有一段代码也是编译报错,但是不知道为什么
[打印本页]
作者:
李跃达
时间:
2013-1-30 14:51
标题:
还有一段代码也是编译报错,但是不知道为什么
就是一个很简单的接口多继承的例子
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");//这里报错,写Ball ball=new Ball("Football")也出问题,什么错误
System.out.println(ball.getName());
}
}
复制代码
作者:
黑马张英涛
时间:
2013-1-30 15:06
interface Rollable extends Playable, Bounceable {
Ball ball = new Ball("PingPang");
}
这个接口中你定义了一个成员变量。但是由于是在接口中,所有成员变量默认都是静态常量,
只是给你省略了public static final 。
所以实际上是
public static final Ball ball=new Ball("PingPang");
下面的代码中你试图让这个常量指向一个新的引用,所以报错了。
作者:
王少雷
时间:
2013-1-30 15:14
这些代码,是在一个类中写的吧?应该是内部类。。。
内部类,你不创建外部实例再去调用 是不行的,你可以创建外部类实例再调用内部实例对象。
new 外().new 内();
作者:
黄成超
时间:
2013-1-30 15:47
首先,任意在接口定义的变量默认为public static final,所以开始的时候你在public void play()方法中不能够改变ball的属性值,更不能重新创建ball对象啦!所以肯定会出错的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2