重载(Overload)

重载是在同一个类中对已有方法的再次编程,它的目的是在使用时能适应更多情况。

这里拿构造函数举例理解:

public class IdCard {public String name;public int age;public String sex;public String address;//一个形参public IdCard(String name){this.name = name;age = 0;sex = null;address = null;}//两个形参public IdCard(String name, int age){this.name = name;this.age = age;sex = null;address = null;}//三个形参public IdCard(String name, int age, String sex){this.name = name;this.age = age;this.sex = sex;this.address = null;}//四个形参public IdCard(String name, int age, String sex, String address){this.name = name;this.age = age;this.sex = sex;this.address = address;}
}

可以看到代码中同名构造函数有四个(其实系统还默认添加了一个无参构造函数),区别在于每一个构造函数中的形参数量不同,这种做法就是重载(Overload),这让这个类的使用者在使用的时候更加自由,不必局限于有限的信息,而且不用更换函数名。

public class Main {public static void main(String[] args) {IdCard a = new IdCard("孙行者");IdCard b = new IdCard("者行孙",500);IdCard c = new IdCard("行者孙",500,"无");IdCard d = new IdCard("孙悟空", 500,"无", "花果山水帘洞");}
}

重载的规则:

  1. 被重载的方法必须改变参数列表(参数个数或类型不一样);
  2. 被重载的方法可以改变返回类型;
  3. 被重载的方法可以改变访问修饰符;
  4. 被重载的方法可以声明新的或更广的检查异常;
  5. 方法能够在同一个类中或者在一个子类中被重载。
  6. 无法以返回值类型作为重载函数的区分标准。

重写(Override)

重写的发生前提是两个类发生了 “继承(extends)” 关系,就是要至少有一个类还有一个继承该类的子类,而且要重写的方法(或字段)在父类中已经存在了(重写,重写,顾名思义就是将已经存在的方法重写一遍),重写(Override)这个操作很好的体现了Java化繁为简的特性,对于有一些具有普遍性的方法,可以先在父类中写出这个方法的雏形,然后根据这个父类的子类们可能各不相同的具体需要,在子类中将这个原始的方法进行拓展甚至完全的重新实现。

//这是一个 “人类” 父类类
public class Person {public String name;public int age;public void behavior(){System.out.println("吃饭,睡觉,打豆豆。");}
}

这是一个父类,他里面的成员变量是一个人类的基本信息,方法behavior() 中呈现的也是一个人类的基本行为,这些东西是所有人类都具备的,最原始的。

下面看几个该父类的子类:

//这是一个 “医生” 子类,继承自 “人类” 类
public class Doctor extends Person{public void Behavior(){//super + " . " 可以调用父类的方法super.behavior();System.out.println("治病救人为本职");}
}

可以看到,这个类中对父类的 behavior() 方法进行了重写,他在原来人类原始能力的基础上(),加入了作为医生的能力。

重载的规则:

  1. 参数列表与被重写方法的参数列表必须完全相同。
  2. 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
  3. 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
  4. 声明为 final 的方法不能被重写。
  5. 声明为 static 的方法不能被重写,但是能够被再次声明。
  6. 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
  7. 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
  8. 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
  9. 构造方法不能被重写。

以上就是我对重写(Override)和重载(Overload)的简单理解,如果各位看官发现有错误的地方,希望能告诉我。

重载(Overload)和重写(Overide)相关推荐

  1. c语言 方法重载 冲定义,C++ 重载(overload)、重写(overrride)、重定义(redefine)

    今天参加了一个面试,问到了上面的C++知识点,都知道,时间久了难免遗忘,感觉回答的一般,不够专业,部分点还答错了,sigh!在此再补漏下. 注意:这些都是C++语言的特性,C语言连最简单的重载(ove ...

  2. C++ 重载(overload)、重写(overrride)、重定义(redefine)总结

    昨晚打开论坛,看到有朋友问了一个关于虚函数的问题,因为头太疼了,所以今天中午起床再看. 问题传送门:http://www.cppleyuan.com/viewthread.php?tid=7923 C ...

  3. 重载Overload 和重写Override区别

    重载Overload 和重写Override区别 一.含义 二.代码 1.重载OverLoad 2.重写Override 一.含义 重载OverLoad:表示同一个类中的可以有多个方法名称相同的方法, ...

  4. Java中方法的重载(overload)与重写/覆写(override)

    重载-Overload 函数的方法参数个数或类型不一致,称为方法的重载. 从含义上说,只要求参数的个数或参数的类型不一致就说两个函数是重载函数,而至于返回值是否一样,没关系.同时,重载可以发生在同一个 ...

  5. C++重载(overload)、重写(overwrite,也称隐藏)、覆盖(override)

    一.重载(overload) 函数名相同,但是它的参数列表中参数的个数.类型或顺序不同.不能靠返回类型来判断.这个最简单,name mangling. (1)函数重载只会发生在同一个作用域中: (2) ...

  6. 覆盖(override)和重载(overload)

    覆盖(override)重写和 重载(overload) 继承,重写--->多态   我懂了,你懂吗 ,不看看文章 java 子类重写父类的方法应注意的问题 Java多态性理解 转载于:http ...

  7. Java 重写(Override)与重载(Overload)

    TestDog.java /*  * 重写(Override)  * 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写!  * 重写的好处在于子类 ...

  8. java override overwrite,重写(overwrite)、重载(overload)和覆盖(override)

    覆盖(override):子类继承了父类的同名无参函数.当子类从父类继承了一个无参函数,而又定义了一个同样的无参函数,则子类定义的方法覆盖父类的方法,称为覆盖.废弃父方法 1.覆盖的方法的标志必须要和 ...

  9. Java面向对象---重写(Override)与重载(Overload)

    一.重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说 ...

最新文章

  1. java 模拟get登录_java 模拟get请求
  2. jQuery.append()、jQuery.html()存在的XSS漏洞
  3. 金融数据分析(四)-------矩,偏度,峰度
  4. Java 并发编程73道面试题及答案 ——面试看这篇就够了!
  5. KN-S1008S1016S1024S1024F端口状态指示
  6. CWnd与HWND的区别与转换
  7. OpenCV计算机视觉实战(Python版)_005图像的梯度处理
  8. leetcode python3 简单题118. Pascal's Triangle
  9. Android科大讯飞语音识别源码及API下载
  10. 【android自定义控件】LinearLayout定义ActionBar样式
  11. 创新检查技术,赋能保密监管 ,您需要一款这样的数据库内容保密检查系统!
  12. matlab怎么fprintf,matlab中的fprintf函数怎么用
  13. 如何修改计算机无线mac地址,如何修改无线网卡物理地址,求指教
  14. 小体积智能直流无刷伺服电机驱动控制器TMCM
  15. jca 实例 java_jca工具分析was的javacore实例解析
  16. 计算机房间的英语,酒店客房状态常用英语
  17. Hexo个人博客NexT主题添加Local Search本地搜索
  18. 如何学习3dsmax?3dsmax教程 中英文版本
  19. 立可得_第2章_新零售_重构人、货、场
  20. 千牛如何撤销发往服务器的文件,千牛服务器没有返回数据

热门文章

  1. js 下的 split
  2. 亲,如果你笑了,记住给我留言!
  3. LUCK——组合数学
  4. Microsoft.NET多国语言资源解决方案
  5. Python_装饰器Decorator
  6. VUE系列-Vue中组件的应用(三)
  7. jQuery源码分析研究学习笔记-jQuery.clean()(七)
  8. TensorFlow2.0(四)--Keras构建深度神经网络(DNN)
  9. Tips--解决安装Multisim时出现No software will be installed or removed无法安装的问题
  10. 数据结构--直接插入排序