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


原文地址:http://www.java2000.net/p11697


Override, 主要是因为父类的功能无法满足需求,我们又不能直接修改父类的情况下,我们通过子类重写,来实现新的功能。
  1. package Lession11;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. /**
  5.  * 老紫竹JAVA基础培训(11),方法的Override.<br>
  6.  * 
  7.  * 
  8.  * @author 老紫竹 JAVA世纪网(java2000.net)
  9.  * 
  10.  */
  11. public class Lession11 {
  12.   public static void main(String[] args) {
  13.     // 单纯基类的测试
  14.     Base b1 = new Base();
  15.     b1.test();
  16.     b1.test("");
  17.     b1.test(new Object());
  18.     System.out.println();
  19.     // 单纯子类的测试
  20.     Sub s1 = new Sub();
  21.     s1.test();
  22.     s1.test("");
  23.     // 静态方法调用,会根据变量的类型,而不是对象的类型
  24.     s1.test(new Object());
  25.     // 上面的代码等同于这个
  26.     Sub.test(new Object());
  27.     System.out.println();
  28.     // 基类的变量,子类的实例的测试
  29.     Base b2 = new Sub();
  30.     b2.test();
  31.     b2.test("");
  32.     // 静态方法调用,会根据变量的类型,而不是对象的类型
  33.     b2.test(new Object());
  34.     // 上面的代码等同于这个
  35.     Base.test(new Object());
  36.   }
  37. }
  38. class Base {
  39.   public void test() {
  40.     System.out.println("Base.test()");
  41.   }
  42.   public Base test(String name) {
  43.     System.out.println("Base.test(String)");
  44.     return this;
  45.   }
  46.   public final void test(int age) {
  47.     System.out.println("final Base.test(int)");
  48.   }
  49.   // 静态方法属于类,不属于实例,所以不存在override问题
  50.   public static void test(Object obj) {
  51.     System.out.println("static Base.test(Object)");
  52.   }
  53. }
  54. class Sub extends Base {
  55.   // 标准的覆盖方法
  56.   public void test() {
  57.     System.out.println("Sub.test()");
  58.   }
  59.   // JDK5开始的覆盖方法
  60.   // 允许返回类型和父类不同,但必须是其子类或者实现类
  61.   public Sub test(String name) {
  62.     System.out.println("Sub.test()");
  63.     return this;
  64.   }
  65.   // 静态方法属于类,不属于实例,所以不存在override问题
  66.   public static void test(Object obj) {
  67.     System.out.println("static Sub.test(Object)");
  68.   }
  69. }


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

2 测试修改返回类型,比如
public String test()
看看编译结果,熟悉错误信息。




总结:
1 覆盖要求参数类型顺序必须和父类相同
2 从JDK5开始,允许返回类型和父类不同,但必须是其子类或者实现类(对于接口)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Java中的@override注解是用来标记方法覆盖父类或接口中的方法。通过使用@override注解,我们可以确保子类或实现类正确地覆盖了父类或接口中的方法,从而避免出现潜在的错误。 反射是Java中的一种机制,用于动态地调用对象的方法或访问对象的属性。通过反射,我们可以在运行时动态地获取类的信息,并调用类中的方法。 如果想要用反射调用外部方法,我们可以按照以下步骤进行操作: 1. 获取目标类的Class对象:使用Class.forName()方法获取目标类的Class对象。 2. 实例化目标类的对象:使用Class对象的newInstance()方法实例化目标类的对象。 3. 获取目标方法的Method对象:使用Class对象的getMethod()方法获取目标方法的Method对象。 4. 调用目标方法:使用Method对象的invoke()方法调用目标方法。 下面是一个示例代码,用于演示如何使用反射调用外部方法: ```java public class ReflectExample { public static void main(String[] args) throws Exception { // 获取目标类的Class对象 Class<?> targetClass = Class.forName("com.example.TargetClass"); // 实例化目标类的对象 Object targetObject = targetClass.newInstance(); // 获取目标方法的Method对象 Method targetMethod = targetClass.getMethod("methodName", parameterTypes); // 调用目标方法 targetMethod.invoke(targetObject, arguments); } } ``` 需要注意的是,在使用反射调用外部方法时,需要提供目标方法的名称、参数类型以及参数值。通过上述步骤,我们可以使用反射机制动态地调用外部方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值