此错误是怎么来的? 哪位高手帮忙看看怎么回事?
//此程序报错说类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");