老紫竹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开始,允许返回类型和父类不同,但必须是其子类或者实现类(对于接口)

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值