黑马程序员技术交流社区
标题: 关于接口的问题。 [打印本页]
作者: 张淼 时间: 2012-9-19 23:00
标题: 关于接口的问题。
尝试编译并运行以下代码,会发生什么? ( )
import java.util.*;
public abstract interface Test1
{
public void test();
}
public class Test2 implements Test1
{
public void test(){}
}
A. 编译错误
B. 运行期异常
C. 编译通过
D. 以上都不对
该题的答案是A,但是我不太清楚错误的点具体在哪里,是因为使用了两个public,还是接口不能用abstract修饰,还是其他的错误。
作者: 赵宇 时间: 2012-9-19 23:06
问题出在 interface 不能用abstract 修饰。
作者: 高照 时间: 2012-9-19 23:13
import java.util.*;
public abstract interface Test1 //一个文件中不能有两个被public修饰的类或接口,编译通不过
{
public void test();
}
public class Test2 implements Test1//一个文件中不能有两个被public修饰的类或接口,编译通不过
{
{
public void test(){}//没有主函数,运行通不过
}
作者: 张淼 时间: 2012-9-19 23:13
疯子雨 发表于 2012-9-19 23:06
问题出在 interface 不能用abstract 修饰。
那两个public没有问题?还是接口和类可以各有一个public?
作者: 张淼 时间: 2012-9-19 23:13
吕书凯 发表于 2012-9-19 23:12
连主函数入口都没有,怎么可能编译通过
如果不考虑主函数的问题呢?
作者: 张忠豹 时间: 2012-9-19 23:59
首先,值得一说的是,接口经过编译后,也是一个.class文件,即接口在java中也是一个类,Java中明确规定,一个java程序中只能有且只有一个被public修饰的类,所以下面的代码是可以编译通过的:
public class Test2 implements Test1{
public void test() {
}
}
abstract interface Test1{
void test();
}
而加上public后,则不能编译通过,
public class Test2 implements Test1{
public void test() {
}
}
public abstract interface Test1{
void test();
}
楼主可以试着编写一个接口,然后编译看看是否是一个.class文件
作者: 夏天 时间: 2012-9-20 00:06
让我来告诉你真相
此题是编译不通过,编译器会报The public type Test1 must be defined in its own file这个错误。
意思是让你在Test1这个接口的自己的文件里定义。
其实也就是说 不能在同一个包中,定义两个public类或接口。
而没有主函数,是在运行时期的错误,运行时,找不到程序的入口。
作者: 李建强 时间: 2012-9-20 05:21
interface默认就是abstract,所以写与不写都一样,这里没错误。- import java.util.*;
- public abstract interface InterfaceTest
- {
- public void test();
- }
复制代码 这个完全可以编译通过的。
问题出在两个public上,一个Java文件可以有多个类,
但是java在public类开始编译机制的,并且这个public类名必须与文件名相同。否则无法编译。
作者: 董志超 时间: 2012-9-20 08:20
类用public修饰后类名必须与文件名保持一致
同一个java文件中不能有两个public修饰的类或接口同时存在
abstract修饰抽象类,interface代表接口,接口是特殊的抽象类,不用abstract修饰
在定义一个主函数
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |