黑马程序员技术交流社区

标题: 求各位大哥解释一下! [打印本页]

作者: 钟成军    时间: 2012-6-4 13:28
标题: 求各位大哥解释一下!
一个java源文件中不能有两个公共类,但是可以有一个公共类和一个公共接口不?接口本来默认是公共的,写不写public 都一样,但是如果写上了public ,在编译时会报错:
错误: 类Animal是公共的, 应在名为 Animal.java 的文件中声明
public interface Animal

这个也不是类啊,只是一个接口,怎么回事呢?
public interface Animal//这是个接口,但是报错怎么说是类,有点不明白,真心求助!
{
void  run( );
}
class  Bird implements Animal
{
public void run()
{
  System.out.println("鸟儿飞!");
}
}
class Fish implements Animal
{
public void run()
{
  System.out.println("鱼儿飞!");
}
}
public class Test
{
public static void main(String [] args)
{
  Bird bird = new Bird();
  bird.run();
  Fish fish = new Fish();
  
  fish.run();
}
}

作者: 唐辉辉    时间: 2012-6-4 14:18
interface 类不写public应该是default类型.    而interface类中的成员则是必须public类型的.
接口是一个特殊的类.也称之为类
作者: 钟成军    时间: 2012-6-4 14:32
唐辉辉 发表于 2012-6-4 14:18
interface 类不写public应该是default类型.    而interface类中的成员则是必须public类型的.
接口是一个特 ...

但是我看到一个练习题上在接口前加了public ,而且是正确答案,接口的默认类型也是public啊,这个怎么说呢?呵呵,真心不懂
作者: 包晗    时间: 2012-6-4 14:39
接口中的成员都是public  
不过public static final abstract  等都可以简写
因为这些时固定修饰符
我没在interface前面没写过public....所以没出过你这样的问题....
作者: 胡团乐    时间: 2012-6-4 15:00
本帖最后由 胡团乐 于 2012-6-4 15:04 编辑

查了下书, 是这么说的:要想创建一个接口,需要用interface关键字来代替class关键字,就像类一样,可以在interface前面添加
public关键字(但仅限于该接口在与其同名的文件夹被定义);如果不添加public,则它只具有包访问权限,这样它就只能在同一个包内可用;
就是说加public的情况下,接口不能和main函数所在的类在同一个java文件里,
package test;
public interface Animal {
        void run();
}
------------------------------
要加public Animal接口必须单独定义为另外一个Animal.java文件
--------------------------
package test;
/*public interface Animal    // 这是个接口,但是报错怎么说是类,有点不明白,真心求助!
{
void run();
}
*/ 这块被抽离出去
class Bird implements Animal {
public void run() {
  System.out.println("鸟儿飞!");
}
}
class Fish implements Animal {
public void run() {
  System.out.println("鱼儿飞!");
}
}
public class Animal1 {
public static void main(String[] args) {
  Bird bird = new Bird();
  bird.run();
  Fish fish = new Fish();
  fish.run();
}
}
这是test包下两个不同的文件,接口没和main函数所在类在一起;
这样就没问题了;


作者: 钟成军    时间: 2012-6-4 15:09
胡团乐 发表于 2012-6-4 15:00
查了下书, 是这么说的:要想创建一个接口,需要用interface关键字来代替class关键字,就像类一样,可以在i ...

谢谢回答,懂了!
作者: 钟成军    时间: 2012-6-4 15:10
已解决,谢谢各位的回答!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2