1 按照JAVA解惑上的例子:
public final class Api {
private static class String{};
public static void main(String[] args) {
}
}为什么我运行报错:
java.lang.NoSuchMethodError: main
Exception in thread "main"
2 为什么覆盖、实现方法不能减少可见性,但是域却可以?
public class Parent { public int i=20; public void test() { }
public static void main(String[] args) {
//10
System.out.println(new Sun().i);
}}class Sun extends Parent{
int i=10; //这个可以设置成private,下面的方法却不行
/* //Cannot reduce the visibility of the inherited method from Parent
private void test() { }*/
}
public final class Api {
private static class String{};
public static void main(String[] args) {
}
}为什么我运行报错:
java.lang.NoSuchMethodError: main
Exception in thread "main"
2 为什么覆盖、实现方法不能减少可见性,但是域却可以?
public class Parent { public int i=20; public void test() { }
public static void main(String[] args) {
//10
System.out.println(new Sun().i);
}}class Sun extends Parent{
int i=10; //这个可以设置成private,下面的方法却不行
/* //Cannot reduce the visibility of the inherited method from Parent
private void test() { }*/
}
public static void main(String[] args)
里面的String是用的你定义的String类
main方法自然就找不到合适参数了public static void main(java.long.String[] args)
这样就可以通过了
主函数中的String应该是java.lang包中的,你自己写了就自己覆盖了,主函数也就不可以执行了,楼上说的清楚
第二个
楼主属于覆盖父类的方法,在覆盖的时候不能降低方法的可见性,你的程序将父类中的public降低为private了所以可以,但是对于数据就没有这个问题,楼主可以看一下域的隐藏详细了解一下
补充下, 还要import java.lang.*; ( 不是long...)
2, override和overload, 这里不能仅改变public, private, 也不能仅仅改变return type
如果加上参数是可以的,如private void test(int x) { }