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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 钟成军 高级黑马   /  2012-6-4 13:28  /  2069 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个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();
}
}

点评

类Animal是公共的, 应在名为 Animal.java 的文件中声明,报错信息都这样说了,说明虚拟机在处理接口时把它当做了类来处理,接口是个特殊的类~  发表于 2012-6-4 14:43

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
interface 类不写public应该是default类型.    而interface类中的成员则是必须public类型的.
接口是一个特殊的类.也称之为类
回复 使用道具 举报
唐辉辉 发表于 2012-6-4 14:18
interface 类不写public应该是default类型.    而interface类中的成员则是必须public类型的.
接口是一个特 ...

但是我看到一个练习题上在接口前加了public ,而且是正确答案,接口的默认类型也是public啊,这个怎么说呢?呵呵,真心不懂
回复 使用道具 举报
接口中的成员都是public  
不过public static final abstract  等都可以简写
因为这些时固定修饰符
我没在interface前面没写过public....所以没出过你这样的问题....
回复 使用道具 举报
本帖最后由 胡团乐 于 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函数所在类在一起;
这样就没问题了;

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
胡团乐 发表于 2012-6-4 15:00
查了下书, 是这么说的:要想创建一个接口,需要用interface关键字来代替class关键字,就像类一样,可以在i ...

谢谢回答,懂了!
回复 使用道具 举报
已解决,谢谢各位的回答!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马