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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

就是一个很简单的接口多继承的例子
  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");//这里报错,写Ball ball=new Ball("Football")也出问题,什么错误
  20. System.out.println(ball.getName());
  21. }
  22. }
复制代码

3 个回复

倒序浏览
interface Rollable extends Playable, Bounceable {
Ball ball = new Ball("PingPang");
}
这个接口中你定义了一个成员变量。但是由于是在接口中,所有成员变量默认都是静态常量,
只是给你省略了public static final 。
所以实际上是 public static final Ball ball=new Ball("PingPang");
下面的代码中你试图让这个常量指向一个新的引用,所以报错了。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
这些代码,是在一个类中写的吧?应该是内部类。。。
内部类,你不创建外部实例再去调用 是不行的,你可以创建外部类实例再调用内部实例对象。

new 外().new 内();

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
首先,任意在接口定义的变量默认为public static final,所以开始的时候你在public void play()方法中不能够改变ball的属性值,更不能重新创建ball对象啦!所以肯定会出错的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马