1.下面的程序输出是什么?为什么?
public class Parent {
public void test(ArrayList list) {
System.out.println("invoke parent's test method");
} public static void main(String[] args) {
Child a = new Child();
ArrayList list = new ArrayList();
a.test(list);
}
}class Child extends Parent {
public void test(List list) {
System.out.println("invoke child's test method");
}
}2.下面的程序输出是什么?为什么?
public class Parent {
public void test(List list) {
System.out.println("invoke parent's test method");
} public static void main(String[] args) {
Child a = new Child();
ArrayList list = new ArrayList();
a.test(list);
}
}class Child extends Parent {
public void test(List list) {
System.out.println("invoke child's test method");
}
}
public class Parent {
public void test(ArrayList list) {
System.out.println("invoke parent's test method");
} public static void main(String[] args) {
Child a = new Child();
ArrayList list = new ArrayList();
a.test(list);
}
}class Child extends Parent {
public void test(List list) {
System.out.println("invoke child's test method");
}
}2.下面的程序输出是什么?为什么?
public class Parent {
public void test(List list) {
System.out.println("invoke parent's test method");
} public static void main(String[] args) {
Child a = new Child();
ArrayList list = new ArrayList();
a.test(list);
}
}class Child extends Parent {
public void test(List list) {
System.out.println("invoke child's test method");
}
}
解决方案 »
- UDP byte[] 发送十六进制数据时出现的问题
- int a = (int)Math.random() * __________; 填空题
- 新手!无法解析导入 java.util.Arraylist,求具体解决方法。
- 打包成jar文件却不能正确执行,为什么?
- 有没有高手给个java JTabbedPane的使用方法,超详细越好!~!
- 关于多态的运用
- 随机问题
- 各位老大这个问题解决呀
- 关于用java运行控制台命令程序代码段Runtime为什么在windows上有异常呢? 80分
- 求助.socket序列化传输问题.
- java 查询某一目录下数据库
- 有人知道怎么把ISO8601标准的时间转化成Java对象吗??
第二个的输出:invoke child's test method
其原因:第一个程序的子类方法被隐藏
第二个程序的父类方法被覆盖
尽管子类有一个和父类同名的方法但是其参数类型不同,这样就没有能把父类的同名方法覆盖掉,在主方法中为子类的实例传进去的是一个ArrayList类型的参数,那么理所当然地会调用父类中的方法。你可以试把程序中的ArrayList test=new ArrayList()改成List test=new ArrayList(),结果还是一样,因为虽然声明为List,但test仍然是ArrayList的一个实例所以同样会调用父类的方法(这一点在JAVA编程思想中有较详细的说明)。
第二个程序:
因为子类中有一个完全与父类相同的方法,所以父类中的方法被覆盖,会调用子类中的方法。
To Student02370236:
如果将ArrayList test=new ArrayList()改成List test=new ArrayList()则可编译通过,并且调用的是子类的方法:)
由于引数不同,子类重载了父类的test(),传入ArrayList对象,于是调用父类的test(ArrayList list)2,invoke child's test method引数相同,子类覆写了父类的test(),要想调用父类的test方法,只能用super.test(List list)别无他法
第一个我是编译通过了的,不知你是用的什么工具,我是用EDITPLUS+JDK1.5...
public void test(List list) 改成public void test(ArrayList list) 通过。