`
逆风的香1314
  • 浏览: 1389774 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    静态(static)方法重写(override)

    静态(static)方法重写(override)

    Java零基础-方法覆盖.md

    建议读者在阅读前具备Java的基础知识,包括类、对象、方法和继承等概念。 在阅读过程中,尝试编写简单的Java程序,体验方法覆盖的效果,并观察父类和子类方法的调用情况。 建议通过阅读相关的Java教材或搜索资料,...

    JAVA基础课程讲义

    方法的重写(override) 74 隐藏/封装(encapsulation) 75 为什么需要封装?封装的作用和含义? 75 使用访问控制符,实现封装 76 封装的使用细节 76 多态(polymorphism) 76 为什么需要多态? 76 如何实现多态? 77 方法...

    java关于@override.md

    对Java中@override个人理解阐述,希望能帮大家更好理解。

    java代码-Override

    java代码-Override

    Java重写(Override)&重载(Overload).pdf

    Java面向对象编程中的重写(override)指的是子类可以重写其父类中的非private方法,使得子类在调用该方法时会使用自己的实现而不是父类的实现。 重写(Override)讲解 定义一个名为 Animal 的父类和一个名为 Cat 的...

    从虚拟机角度看Java多态->(重写override)的实现原理

    从虚拟机角度看Java多态-&gt;(重写override)的实现原理

    Lua 类的继承与override

    Lua中没有类的概念,但是程序猿说要面向对象,然后就有类。程序猿说要继承 和override,然后就有了继承 和 override 。

    java基础心得总结.rar

    描述java基础容易忽略的问题,如下面几个知识点: int a = 1;1会存放在栈里 String s1 = "thanks";thanks会存放在data segment里 String s2 = new String("thanks");thanks会存放在data segment里 String a ="th...

    Java面向对象(进阶)- 四种权限测试与方法的重写(override-overwrite)

    Java面向对象(进阶)-- 四种权限测试与方法的重写(override_overwrite)

    java基础案例与开发详解案例源码全

    1.3.3 JavaME微型版11 1.4 JavaSE环境安装和配置12 1.4.1 什么是JDK12 1.4.2 JDK安装目录和实用命令工具介绍12 1.4.3 设置环境变量13 1.4.4 验证配置的正确性14 1.5 MyEcilpse工具介绍JavaSE环境安装和配置15 1.6 本...

    java基础题 很全面

    Java基础 6 1. 面向对象的特征有哪些方面 6 2. String是最基本的数据类型吗? 7 3. int 和 Integer 有什么区别 7 4. String 和StringBuffer的区别 7 5. 运行时异常与一般异常有何异同? 7 6. 说出ArrayList,Vector, ...

    android @override 报错解决方案

    现象: … java: 1801: method does not override a method from its superclass @Override… 原因: Eclipse is defaulting to Java 1.5 and you have classes implementing interface methods (which in Java 1.6 ...

    Java零基础-继承.md

    建议读者在阅读前具备Java的基础知识,包括类、对象、方法和成员变量等概念。 在阅读过程中,尝试编写简单的Java程序,创建并使用父类和子类。 建议通过阅读相关的Java教材或搜索资料,进一步扩展学习与继承相关的...

    java代码-Override2

    java代码-Override2

    9.尚硅谷_java基础_枚举&注解

    枚举 定义 自实现枚举类 使用 enum 定义枚举类 实现接口的枚举类 枚举类的方法 注解

    Java开发技术大全(500个源代码).

    示例描述:本章介绍开发Java的基础语法知识。 accumulationByDoWhile.java 用do~while语句写的累加程序 accumulationByFor.java 用for语句写的累加程序 accumulationByWhile.java 用while语句写的累加程序 ...

    Java语法基础-面试专题及答案

    11.Java 面向对象编程三大特性: 封装 继承 多态 关于继承的3点 12.String StringBuffer 和 StringBuilder 的区别是什么 String 为什么是不可变的 可变性、线程安全性的研究 13.自动装箱与拆箱 14.在一个静态方法内...

    Java基础的笔试题

    Java基础的笔试题 String 和StringBuffer 的区别 运行时异常与一般异常有何异同? Collection 和 Collections 的区别 sleep() 和 wait() 有什么区别? Overload 和Override 的区别。Overloaded 的方法是否可以改变...

Global site tag (gtag.js) - Google Analytics