日期:2014-05-20  浏览次数:20683 次

此错误是怎么来的? 哪位高手帮忙看看怎么回事?
//此程序报错说类CareAnimal是公共的,应在文件中声明等。
public interface CareAnimal {
public void play();
public void feed();
}

class Cadre implements CareAnimal {
void play() {
System.out.println("干部带它玩");
}
void feed() {
System.out.println("干部给它喂食");
}
void travel() {
System.out.println("干部带它旅游");
}
}

public class Test {
public static void main(String args[]) {
Cadre a = new Cadre();
a.travel();
}
}


------解决方案--------------------
public interface CareAnimal 
class Cadre implements CareAnimal
public 子类的范围不能比父类小。
------解决方案--------------------
你的文件名是什么,java需要public的类与文件名一样。一个源文件里只能有一个public
楼主新建一个CareAnimal.java吧
------解决方案--------------------
Cadre 类中实现的三个方法前加上public,不要用那个默认的
------解决方案--------------------
引用:
引用:你的文件名是什么,java需要public的类与文件名一样。一个源文件里只能有一个public
楼主新建一个CareAnimal.java吧
文件名是Test,是不是我定义接口CareAnimal的时候前面加的public导致了这个问题?


对,而且楼上的也说到了,Cadre类的方法不能比父类中的方法可见性低。如果你要改这个文件的话
把CareAnimal接口的public去掉,把Cadre类的方法加上public
------解决方案--------------------
引用:
引用:引用:引用:你的文件名是什么,java需要public的类与文件名一样。一个源文件里只能有一个public
楼主新建一个CareAnimal.java吧
文件名是Test,是不是我定义接口CareAnimal的时候前面加的public导致了这个问题?

对,……



Cadre类不加public,类里面的方法加public
------解决方案--------------------
把Cadre中的play和feed改成public控制
------解决方案--------------------
一个.java文件里面只能有一个public类,而且.java文件以这个类名命名。不然编译器找不到程序入口在哪里。
------解决方案--------------------
引用:
一个.java文件里面只能有一个public类,而且.java文件以这个类名命名。不然编译器找不到程序入口在哪里。

定!
------解决方案--------------------
引用:
为什么类?可不可以解释下? 

覆盖类方法的可访问性不能低于被覆盖类方法的可访问性(这个人家已经说了)
原因是此等覆盖结构体系在对外使用时可能只有被覆盖类已知,而覆盖类的具体细节可能要等到运行时才能得悉(多态),这样可能会导致运行时错误。另外接口类型方法不管声明不声明都是public abstract的(声明反而显得有点多余,根据JLS)



public class TestCars { 
public static void main (String [] args) { 
Car a = new Car(); 
Car b = new Porsche(); //Car ref, but a Porsche object 
a.drive(); // Runs the Car version of drive() 
b.drive(); // Runs the Porsche version of drive() 


class Car { 
public void drive() { 
System.out.println("Generic Car Driveing Generically"); 


class Porsche extends Car { 
private void drive() { // whoa! - it's private! 
System.out.println("Porsche driving Full Throttle");