初学求教!一道练习题

nmywg 2004-06-22 12:09:40
题目是这样的:设计一个接口IAdd,并在其中声明一个方法AddNum(int srcNum),然后设计一个类MyAdd实现这个借口,实现将参数srcNum加2并打印输出的功能,设计另一个类MyAdd2也实现这个接口,并将参数srcNum加10并打印输出。

我的代码如下:
interface IAdd{
void AddNum(int srcNum);
}
public class MyAdd implements IAdd {

public void AddNum(int srcNum){

srcNum=srcNum+2;
System.out.println("srcNum+2="+srcNum);
}





}
public class MyAdd2 implements IAdd{
public void AddNum(int srcNum){
srcNum=srcNum+10;
System.out.println("srcNum+10="+srcNum);
}



}
public static void main(String[] args){
MyAdd x=new MyAdd(3);
MyAdd2 y=new MyAdd2(3);
}

编译器出错提示:
G:\job\java\example\IAdd>javac interface.java
interface.java:26: 'class' or 'interface' expected
public static void main(String[] args){
^
1 error

请大家帮我看看,谢谢
...全文
215 点赞 收藏 23
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
nmywg 2004-06-24
谢谢大家,哪位高手能不能把整个题目中出现的问题给总结一下?包括涉及到的知识点!
回复
nmywg 2004-06-24
晕。看来还是结了吧!怎么没一个人给总结?
回复
zxh0579 2004-06-24
青古兄的程序段编译没有问题,而且确实如我所想的,MyAdd x=new MyAdd(3);MyAdd2 y=new MyAdd2(3);中的参数可以改称任意的整数,只要在表达范围内就可以了。


我昨晚上之所以编译出错,是因为把青古兄的构造函数的存放顺序弄错了,但我认为这不是引起错误的原因,看上面的错误提示也不象,不过还是不知道到原因所在。

btw 本来昨天晚上就因该贴这个帖子,但是社区又不允许连续3次发铁,郁闷。
回复
lin6234123456 2004-06-24
要关联的话,请看:
interface IAdd{
void AddNum();
}
class MyAdd2 implements IAdd {
public int i;
public MyAdd2(int j) {
i=j;
}
public void AddNum(){
i=i+10;
System.out.println("srcNum+10="+i);
}



}
public class MyAdd implements IAdd {

public int i;
public MyAdd(int j) {
i=j;

}
public void AddNum(){

i=i+2;
System.out.println("srcNum+2="+i);

}



public static void main(String[] args){
MyAdd x=new MyAdd(3);
x.AddNum();
MyAdd2 y=new MyAdd2(3);
y.AddNum();

}


}

回复
zxh0579 2004-06-23
刚刚试了一下,青古兄的那个编译没有通过。错误代码如下
D:\javacode>javac *.java
MyAdd2.java:13: cannot resolve symbol
symbol : constructor MyAdd (int)
location: class MyAdd
MyAdd x = new MyAdd(3);
^
MyAdd2.java:15: cannot resolve symbol
symbol : constructor MyAdd2 (int)
location: class MyAdd2
MyAdd2 y = new MyAdd2(3);
^
2 errors

把原程序中的
MyAdd x=new MyAdd(3);
x.AddNum(3);
MyAdd2 y=new MyAdd2(3);
y.AddNum(3);

在新建对象的时候的参数3 去掉,就可以编译通过,不知道为什么?
回复
zxh0579 2004-06-23
另外shuneng() 说的要放成分别的不同的几个文件也是对的,想想看,如果好几个类,放在同一个文件中,那么怎么取文件名呢?

不知道我说得是否正确?
回复
zxh0579 2004-06-23
看了你们的讨论,我收获非常的大,谢谢了,罗马数字总结如下,请大家指正;

1G:\job\java\example\IAdd>javac interface.java
interface.java:26: 'class' or 'interface' expected
public static void main(String[] args){
^
1 error
这个错误提示是指 main函数需要属于一个class或者interface

2 一个源程序文件里面最多只能有一个最Public 类,但是可以没有public类

3 如果没有明确指出构造函数,那么就采用了默认的构造函数来new一个对象,这个时候默认的构造对象是没有参数的,所以new的时候就不能带参数

4 青古兄的程序可以顺利执行,但是MyAdd x=new MyAdd(3) 和 x.AddNum(3)里面的3没有任何关系,把程序改成MyAdd x=new MyAdd(4);
x.AddNum(3);
MyAdd2 y=new MyAdd2(5);
y.AddNum(3);
也能够得出同样的结果


不知以上的观点是否则很正确,晚上回家编译试试看。

我也是刚刚学习的,以后少不了要麻烦大家,还往不啬赐教!!!!谢谢
回复
blasterboy 2004-06-23
public static void main(String[] args){
MyAdd x=new MyAdd(3);
MyAdd2 y=new MyAdd2(3);
}

把这句话放在一个类里面就可以了
回复
lin6234123456 2004-06-23
interface IAdd{
void AddNum(int srcNum);
}
class MyAdd2 implements IAdd{
private int i;
public MyAdd2(int i) {
i=i;
}
public void AddNum(int srcNum){
srcNum=srcNum+10;
System.out.println("srcNum+10="+srcNum);
}



}
public class MyAdd implements IAdd {

private int i;
public MyAdd(int i) {
i=i;

}
public void AddNum(int srcNum){

srcNum=srcNum+2;
System.out.println("srcNum+2="+srcNum);

}



public static void main(String[] args){
MyAdd x=new MyAdd(3);
x.AddNum(3);
MyAdd2 y=new MyAdd2(3);
y.AddNum(3);

}


}

运行结果:
srcNum+2=5
srcNum+10=13
回复
HawaiiLeo 2004-06-22
你的程序出现三个错误:
1. 一个文件里面只能有一个public 类
2. 你定义的类的构造方法都是无参数的,而你定义类的对象的时候
MyAdd x=new MyAdd(3);
MyAdd2 y=new MyAdd2(3);
都带有参数,错误。
3. 你把类的对象的定义和方法的调用搞错了。应该为:
MyAdd x = new MyAdd();
x.AddNum(3);
MyAdd2 y = new MyAdd2();
y.AddNum(3);
回复
HawaiiLeo 2004-06-22
interface IAdd{
void AddNum(int srcNum);
}
class MyAdd implements IAdd {

public void AddNum(int srcNum){

srcNum = srcNum + 2;
System.out.println("srcNum+2="+srcNum);
}
}
public class MyAdd2 implements IAdd{
public void AddNum(int srcNum){
srcNum = srcNum + 10;
System.out.println("srcNum+10="+srcNum);
}

public static void main(String[] args){
MyAdd x = new MyAdd();
x.AddNum(3);
MyAdd2 y = new MyAdd2();
y.AddNum(3);
}
}
回复
nmywg 2004-06-22
还是出错:
G:\job\java\example\IAdd>javac interface.java
interface.java:26: 'class' or 'interface' expected
public static void main(String[] args){
^
1 error

回复
nmywg 2004-06-22
楼上的能说说错的原因吗?
回复
shuneng 2004-06-22
public interface IAdd{
public void AddNum(int srcNum);
}
public class MyAdd implements IAdd {

public void AddNum(int srcNum){

srcNum=srcNum+2;
System.out.println("srcNum+2="+srcNum);
}

}

public class MyAdd2 implements IAdd{
public void AddNum(int srcNum){
srcNum=srcNum+10;
System.out.println("srcNum+10="+srcNum);
}



public static void main(String[] args){
MyAdd x=new MyAdd(3);
MyAdd2 y=new MyAdd2(3);
}

}
回复
nmywg 2004-06-22
这个名字可以换其他的吗?只能叫MyAdd2。java吗?难道和其他一般的类一样吗?
回复
nmywg 2004-06-22
那main函数,可以放在第一个类MyAdd中吗?
在public class MyAdd2 implements IAdd中
只能在MyAdd2类中用public?为什么要加这个public呢,好像也没有类访问他呀!
很菜,先谢谢大家了!
回复
eboyzhang 2004-06-22
在Java中,所有的代码数据都是放置在类中的, 你的main函数是独立的,不在一个class中!
回复
shuneng 2004-06-22
你要将interface和另外两个类分别放在不同的三个文件中
再用编译器编译。
回复
luiss 2004-06-22
楼主:
HawaiiLeo(罗马数字) 给你指出的三个错误说得很好,你把错误改正后就不会出错了
回复
binny 2004-06-22
楼主看你下面这东西

public static void main(String[] args){
MyAdd x=new MyAdd(3);
MyAdd2 y=new MyAdd2(3);
}

放在外面耷拉着像什么样子,赶紧收回去

:D
回复
发帖
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2004-06-22 12:09
社区公告
暂无公告