《thinking in java 2nd》里的一道题,请大家帮忙看一下

evaporater 2003-04-02 05:41:52
//修改MouseList.java,使它继承ArrayList而非使用组合(composition)手法。
import java.util.*;

public class MouseList2 extends ArrayList{
public void add(Mouse m) {
super.add(m);
}
public Mouse get(int index) {
return (Mouse)(super.get(index));
}
public int size() { return super.size(); }

public class Mouse {
private int mouseNumber;
Mouse(int i) { mouseNumber = i; }
// Override Object.toString():
public String toString() {
return "This is Mouse #" + mouseNumber;
}
public int getNumber() {
return mouseNumber;
}
}

public static void main(){
MouseList2 list = new MouseList2();
for(int i = 0; i < 3; i++)
list.add(new Mouse(i));
}
}

---------------------------------------------------------------------
编译错误提示:
D:\tools\jdk1.3\mycode\MouseList2.java:8: MouseList2中的get(int) 不能覆盖java.util.ArrayList中的get(int); 返回类型不兼容
发现:MouseList2.Mouse
需要:java.lang.Object
public Mouse get(int index) {
^
D:\tools\jdk1.3\mycode\MouseList2.java:28: 在静态上下文中不能引用非静态变量 this
list.add(new Mouse(i));
^
2 个错误

Tool completed with exit code 1D:\tools\jdk1.3\mycode\MouseList2.java:8: MouseList2中的get(int) 不能覆盖java.util.ArrayList中的get(int); 返回类型不兼容
发现:MouseList2.Mouse
需要:java.lang.Object
public Mouse get(int index) {
^
D:\tools\jdk1.3\mycode\MouseList2.java:28: 在静态上下文中不能引用非静态变量 this
list.add(new Mouse(i));
^
2 个错误

Tool completed with exit code 1

请问大家,我该怎么改啊
...全文
30 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
evaporater 2003-04-03
  • 打赏
  • 举报
回复
我新建了一个包mylib,把Mouse.java至于其中,在编译MouseList.java时出错。具体如下:

//Mouse.java
package mylib;

public class Mouse {
int mouseNumber;
public Mouse(int i) { mouseNumber = i; }
// Override Object.toString():
public String toString() {
return "This is Mouse #" + mouseNumber;
}
public int getNumber() {
return mouseNumber;
}
}

///////////////////////////////////////////////////////////////////
//MouseList.java
import java.util.*;
import mylib.*; //为什么改为import mylib.Mouse;编译即可通过?

public class MouseList extends ArrayList{
public static void main(String[] args){
MouseList list = new MouseList();
for(int i = 0; i < 3; i++)
list.add(new Mouse(i));
for(int i = 0; i < list.size(); i++)
System.out.println(list.get(i));
}
}

///////////////////////////////////////////////////////////////////
编译错误消息:
D:\tools\jdk1.3\mycode\MouseList.java:9: 不能解析符号
符号:构造方法 Mouse (int)
位置:类 in Mouse
list.add(new Mouse(i));
^
1 个错误

Tool completed with exit code 1


不知道为什么会出现这样的情况,请大家一起来探讨,谢谢
kyobo 2003-04-03
  • 打赏
  • 举报
回复
public static class Mouse{......}
main是static静态方法引用的类也得要是静态方法,表示长久驻留类存。
evaporater 2003-04-03
  • 打赏
  • 举报
回复
现在好了,改成static public class Mouse 就没事了,我再想想为什么,谢谢大家!
evaporater 2003-04-03
  • 打赏
  • 举报
回复
谢谢楼上几位!
改完如下:

import java.util.*;

public class MouseList2 extends ArrayList{
public void add(Mouse m) {
super.add(m);
}
public Object get(int index) {
return (Mouse)(super.get(index));
}
public int size() { return super.size(); }

public class Mouse {
private int mouseNumber;
Mouse(int i) { mouseNumber = i; }
// Override Object.toString():
public String toString() {
return "This is Mouse #" + mouseNumber;
}
public int getNumber() {
return mouseNumber;
}
}

public static void main(String[] args){
MouseList2 list = new MouseList2();
for(int i = 0; i < 3; i++)
list.add(new Mouse(i));
}
}

错误提示:
D:\tools\jdk1.3\mycode\MouseList2.java:28: 在静态上下文中不能引用非静态变量 this
list.add(new Mouse(i));
^
1 个错误

Tool completed with exit code 1

不是太明白什么原因?
nztech 2003-04-02
  • 打赏
  • 举报
回复
public static void main(String[] args){}

注意参数
kyobo 2003-04-02
  • 打赏
  • 举报
回复
别忘了static main();编译能过,执行不行。
fuyang 2003-04-02
  • 打赏
  • 举报
回复
public Object get(int index) {
return super.get(index);
}

static class Mouse

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧