JAVA基础培训(11),方法的Override
时间:2011-04-07 csdn 老紫竹
Override, 主要是因为父类的功能无法满足需求,我们又不能直接修改父类的情况下 ,我们通过子类重写,来实现新的功能。
package Lession11;
import java.util.ArrayList;
import java.util.List;
/**
* 老紫竹JAVA基础培训(11),方法的Override.<br>
*
*
* @author 老紫竹 JAVA世纪网(java2000.net)
*
*/
public class Lession11 {
public static void main(String[] args) {
// 单纯基类的测试
Base b1 = new Base();
b1.test();
b1.test("");
b1.test(new Object());
System.out.println();
// 单纯子类的测试
Sub s1 = new Sub();
s1.test();
s1.test("");
// 静态方法调用,会根据变量的类型,而不是对象的类型
s1.test(new Object());
// 上面的代码等同于这个
Sub.test(new Object());
System.out.println();
// 基类的变量,子类的实例的测试
Base b2 = new Sub();
b2.test();
b2.test("");
// 静态方法调用,会根据变量的类型,而不是对象的类型
b2.test(new Object());
// 上面的代码等同于这个
Base.test(new Object());
}
}
class Base {
public void test() {
System.out.println("Base.test()");
}
public Base test(String name) {
System.out.println("Base.test(String)");
return this;
}
public final void test(int age) {
System.out.println("final Base.test(int)");
}
// 静态方法属于类,不属于实例,所以不存在override问题
public static void test(Object obj) {
System.out.println("static Base.test(Object)");
}
}
class Sub extends Base {
// 标准的覆盖方法
public void test() {
System.out.println("Sub.test()");
}
// JDK5开始的覆盖方法
// 允许返回类型和父类不同,但必须是其子类或者实现类
public Sub test(String name) {
System.out.println("Sub.test()");
return this;
}
// 静态方法属于类,不属于实例,所以不存在override问题
public static void test(Object obj) {
System.out.println("static Sub.test(Object)");
}
}
JAVA基础培训(11),方法的Override(2)
时间:2011-04-07 csdn 老紫竹
测试:
1 自行增加多个参数的覆盖使用,并测试运行结果
2 测试修改返回类型,比如
public String test()
看看编译结果,熟悉错误信息。
总结:
1 覆盖要求参数类型顺序必须和父类相同
2 从JDK5开始,允许返回类型和父类不同,但必须是其子类或者实现类(对于接口) |