JAVA基础培训(11),方法的Override

Override, 主要是因为父类的功能无法满足需求,我们又不能直接修改父类的情况下 ,我们通过子类重写,来实现新的功能。

package Lession11;import java.util.ArrayList;import java.util.List;/*** 老紫竹JAVA基础培训(11),方法的Override.*** @**/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)"); }}

测试:

1 自行增加多个参数的覆盖使用,并测试运行结果

2 测试修改返回类型,比如

public String test()

看看编译结果,熟悉错误信息。

总结:

1 覆盖要求参数类型顺序必须和父类相同

2 从JDK5开始,允许返回类型和父类不同,但必须是其子类或者实现类(对于接口)

往往教导我们大家要好好学习天天向上,

JAVA基础培训(11),方法的Override

相关文章:

你感兴趣的文章:

标签云: