一、方法的重载

  重载就是根据不同的数据类型,自动匹配对应的方法。重载在编译的时候就决定调用哪个方法了,和重写不一样。(常见,构造函数重载)。

举个栗子:

1、基本数据类型的重载:

 1 /**
 2  * @author 薛定谔的猫
 3  * 基本数据类型的重载
 4  * */
 5 public class Main {
 6
 7     static void methed( byte b) {
 8         System.out.println("byte:method");
 9     }
10
11     static void method(double d) {
12         System.out.println("double:method");
13     }
14
15     static void method(int i) {
16         System.out.println("int:method");
17     }
18
19     static void method(String s) {
20         System.out.println("String:method");
21     }
22
23     public static void main(String[] args) {
24         methed((byte)1);
25         method(2.0);
26         method(1);
27         method("zpoor");
28     }
29 }
30
31 /*
32  * 结果:
33  *         byte:method
34  *        double:method
35  *        int:method
36  *        String:method
37 */

2、带对象引用参数的重载

 1 /**
 2  * @author 薛定谔的猫
 3  * 带有对象引用参数的重载*/
 4 class Animal {
 5
 6 }
 7
 8 class Pig extends Test{
 9
10 }
11
12 class Test {
13     static void method(Test a) {
14         System.out.println("Animal");
15     }
16
17     static void method(Pig p) {
18         System.out.println("Pig");
19     }
20
21     public static void main(String[] args) {
22         Test a = new Test();
23         Pig p = new Pig();
24         Test b = new Pig();
25
26         method(a);
27         method(p);
28         method(b);//为啥不是Pig,而是Animal
29         /*
30          * 盲目分析:看的是引用类型而不是对象类型,重载在编译时候就决定了,
31          *             引用类型决定了哪个重载方法。
32          * */
33
34     }
35 }
36
37 /**
38  * 结果:
39  *     Animal
40     Pig
41     Animal
42 */

总结:重载的规则

1、重载的方法必须改变参数列表,参数必须不同(参数的个数,参数的类型,参数的顺序)

2、被重载的方法与返回值没有关系,不是通过返回值类型来判断方法是不是重载了。

3、重载的方法可以改变访问修饰符。

4、重载的方法可以声明新的或者更广的建厂异常。

5、方法能够在一个类或者一个子类中被重载。

二、方法的重写

重写只能出现在继承关系中,只要父类的方法不是final修饰的,都可以重写父类的方法。重写的有点:能够定义某个子类特有的特征。

举个栗子:

 1 /**
 2  * @author 薛定谔的猫
 3  * 重载例子*/
 4 class Animal {
 5     public void eat() {
 6         System.out.println("吃点东西");
 7     }
 8 }
 9
10 class Horse extends Animal {
11     public void eat() {
12         System.out.println("吃点草");//实现重载
13         }
14 }

对于父类继承的抽象方法,要么子类是重写该方法,要么把子类也设为抽象子类。所以抽象方法可以说是必须重写的方法。

重写的意义:

  重写可以实现多态,用父类的引用来指向子类对象。

举个栗子:

 1 /**
 2  * @author 薛定谔的猫
 3  * 重写例子*/
 4 public class Test {
 5     public static void main(String[] args) {
 6         Animal p = new Pig();
 7         p.eat();
 8     }
 9 }
10
11
12 class Animal {
13     public void eat() {
14         System.out.println("吃点东西吧");
15     }
16 }
17
18 class Pig extends Animal {
19     public void eat() {
20         System.out.println("吃点猪食beautiful");
21     }
22 }

重载原则:(盲目分析):

  使用了什么引用,编译器只会调用引用类所拥有的方法。如果调用子类特有的方法就会报错。也就是说,编译器只看引用;类型,不看对象类型。

重写方法的规则:

1、重写方法不能比被重写方法限制有更要个的访问限权。(但是可以更加宽泛,父类是包访问,子类的重写方法可以使public访问权限,特别留意toSting())

2、参数列表必须与被重写的方法相同(重写和重载的区别)

3、重写返回类型必须与被重写方法的返回类型相同

4、重写方法不能抛出新的异常,或者比被重载方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常

5、final修饰的方法不能被重写

6、一个方法不能被继承,则不能重写他(比如被final修饰的类的方法,还有就是父类的private修饰的方法)

好了盲目分析完了,写点代码压压惊。

转载于:https://www.cnblogs.com/zpoor/p/7609179.html

Java-重载、重写(冷静分析)相关推荐

  1. 方法重写实例java,java方法重写实例分析

    本文实例讲述了java方法重写,分享给大家供大家参考.具体分析如下: 一.方法的重写概述: 1.在子类中可以根据需要对从基类中继承来的方法进行重写. 2.重写的方法和被重写的方法必须具有相同方法名称. ...

  2. java重载与重写的区别+重写父类equals方法的完美实现

    [0]README 0.1) 本文章节[1]和[2]的内容转自 http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html : 旨 ...

  3. Java——重载和重写

    前言 在程序设计中经常会遇到对对方法的重载或者重写,下面将介绍重载和重写. 重载(Overloade) 重载出现的原因 任何程序设计语言都具备的一项重要特性就是对名字的运用.当创建一个对象时,就给对象 ...

  4. Java的重写和重载机制

    Java的重写和重载机制 张磊 zhangleispirit@gmail.com Java的重写和重载是两种在Java中经常提到的两组概念,它们在各个方面都有着很大的不同,本文主要在此做一个归纳总结. ...

  5. java方法重载_在Python中该如何实现Java的重写与重载

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:清风python PS:如有需要Python学习资料的小伙伴可以加点击 ...

  6. Java 方法重写与重载的区别 示例 重载多数相加求和 重写toString()和equals()

    Java 方法重写与重载的区别 重载:在同一个类中,当方法名相同,形参列表不同的时候 多个方法构成了重载 重写:在不同的类中,子类对父类提供的方法不满意的时候,要对父类的方法进行重写. 名称\属性 E ...

  7. java 接口 抽象类 继承 重载 重写 多态

    4.1 抽象类 在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的. 同时,抽象类体现了数据抽象的思想,是实现多态的一种机制.它定义了一组抽象的方法, ...

  8. Java - 重载 与 重写 的区别

    静态分派与动态分派 1. 静态类型[外观类型] => 方法执行版本 => 编译期确定 2. 实际类型 => 方法执行版本 => 运行期确定 静态解析与动态连接 1. 静态解析: ...

  9. Java方法重写与重载的区别

    Java方法重写(Override)与重载(Overload)的区别(超详细) 首页在我们要学习这个知识点之前,应该要先了解什么是多态? 在最初学习java的时候,人们都知道,java这种面向对象的语 ...

  10. 11 java 王少飞-Java语言的主要特性分析

                                                Java语言的主要特性分析 1.Java语言是简单的. Java语言的语法与C语言和C++语言很接近,使得大多数 ...

最新文章

  1. 为什么科技互联网公司越来越重视数学?贾扬清等大牛如是说
  2. html像素和em转换,初识HTML(5)+CSS(3)-2020升级版 - 像素px:相对单位em:就是本元素给定字...
  3. boost::fibers::promise用法的测试程序
  4. Leet Code OJ 191. Number of 1 Bits [Difficulty: Easy]
  5. java access jdbc_Java连接Access数据库
  6. 中国信通院金融科技负责人韩涵:大数据是生产资料的变革,区块链是生产关系的变革...
  7. 圣诞节美食聚会派对海报设计
  8. 虚拟机 ----- 最小安装如何安装设置ip ,并启用ifconfig命令
  9. 围棋选手不到30岁就下坡,最大因素是什么?
  10. 实战分析PHP大马隐藏后门——案例一
  11. 语音识别百度阿里哪家强?识别率评测
  12. html css表格制作,CSS 表格(Table)
  13. 惠普电脑锁屏快捷键怎么设置?
  14. tomcat HTTP与HTTPS同时开启并且同时可以访问
  15. 为什么CAD输入文字时文字特别大但输入后就消失了?
  16. 【转】浅谈程序猿的职业规划,看你如何决定自己的未来吧。
  17. 【五六七人口普查】省市两级分年龄、性别的人口
  18. Diango:Django基础
  19. 怎样调整3dsMax中的样条曲线
  20. 面向AI应用,美光准备好了!

热门文章

  1. 十六、Oracle学习笔记:索引和约束(表字段快速查询和约束)
  2. 做网站买主机还是服务器,做网站买主机还是服务器
  3. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-2.快速搭建SpringBoot项目,采用IDEA...
  4. mysql-cluster5.7搭建集群(实际测试有效)
  5. freeCodeCamp:Title Case a Sentence
  6. 【1083】code[vs] 1083 Cantor表 1999年NOIP全国联赛普及组
  7. Web---演示Servlet的相关类、下载技术、线程问题、自定义404页面
  8. 使用Vibrator控制手机振动
  9. 团队开发——冲刺1.e
  10. SyntaxHighlighter3.0.83 配置