class Alpha {
public void foo(String... args) {
System.out.print("Alpha : foo");
}}public class Beta extends Alpha {
public void foo(String a) {
System.out.print("Beta : foo");
} public static void main(String[] args) {
Alpha a = new Beta(); a.foo("test"); }
}new Beta();了为什么不用他的foo
public void foo(String... args) {
System.out.print("Alpha : foo");
}}public class Beta extends Alpha {
public void foo(String a) {
System.out.print("Beta : foo");
} public static void main(String[] args) {
Alpha a = new Beta(); a.foo("test"); }
}new Beta();了为什么不用他的foo
类型改成B,就掉B的foo了。
class Alpha {
public void foo(String... args) {
System.out.print("Alpha : foo");
}}public class Beta extends Alpha {
public void foo(String... args) {//这里的参数要和Alpha一致
System.out.print("Beta : foo");
} public static void main(String[] args) {
Alpha a = new Beta(); a.foo("test"); }
}
所以你写的在子类的方法并没有覆盖他.
所以就会出现这样的结果了
上面参数是String [] 下面是 String ,所以不是重写。下面改为String[] 或String ...估计就是重写了
如果想防止此情况的发生,可使用:@Override
例如:
class Alpha {
public void foo(String... args) {
System.out.print("Alpha : foo");
}}public class Beta extends Alpha {
/*编译不通过,直到对父类foo方法覆盖*/
@Override public void foo(String a) {
System.out.print("Beta : foo");
} public static void main(String[] args) {
Alpha a = new Beta(); a.foo("test"); }
}
void foo(String... args)参数相当于传一个String[].基本上等同于void foo(String[] args)