问题有点难描述,看以下代码:
class A {
public void ma(String... names) {
System.out.println("Class A");
}
}class B extends A {
// 这里的参数如果是String[] names或String...names,最终输出结果是Class B
public void ma(String names) {
System.out.println("Class B");
}
}public class TestVarargs {
public static void main(String[] args) {
A a = new B();
a.ma("Tom");// 这里调用的为什么是A中的函数?最好能描述一下对象在内存中的情况
}
}最终输出结果是Class A;也就是a.ma("Tom");这里调用的是A中的函数。求解!!!如果有相关材料解答也可以告诉我,谢谢啦
class A {
public void ma(String... names) {
System.out.println("Class A");
}
}class B extends A {
// 这里的参数如果是String[] names或String...names,最终输出结果是Class B
public void ma(String names) {
System.out.println("Class B");
}
}public class TestVarargs {
public static void main(String[] args) {
A a = new B();
a.ma("Tom");// 这里调用的为什么是A中的函数?最好能描述一下对象在内存中的情况
}
}最终输出结果是Class A;也就是a.ma("Tom");这里调用的是A中的函数。求解!!!如果有相关材料解答也可以告诉我,谢谢啦
方法重写是必须写成 public void ma(String... names) {
System.out.println("Class B");
}
这样的。你把参数改成String name就不是覆盖父类的方法了。
想当于。你的B类中有ma(String... names),和ma(String name)两方法;
这是可以够成方法重载的。方法重载。同名不同参与返回类型无关。
public void ma(String... names)和public void ma(String names)不是重写,因为参数不一样,谢谢各位啦
public transient int a=0;
public void ma(String... names) {
System.out.println("Class A");
}
}class B extends A {
// 这里的参数如果是String[] names或String...names最终输出结果是Class B
public void ma(String names) {
System.out.println("Class B");
}
public void ma(String... names) {
System.out.println("Class B1");
}
}public class TestVarargs {
public static void main(String[] args) {
A a = new B();
a.ma("Tom");// 这里调用的为什么是A中的函数?最好能描述一下对象在内存中的情况
}
}这样输出的是Class B1 谢谢啦 结贴啦
public void ma(String... names) {
System.out.println("Method A");
}
public void ma(String names) {
System.out.println("Method B");
}
public static void main(String[] args) {
A a = new A();
a.ma(""); // 这里输出了 Method B 。那 JVM 处理 a.ma("") 时,它为什么认为调用的是 ma(String names) 而不是 ma(String... names)
}
}