Java-重载、重写(冷静分析)
一、方法的重载
重载就是根据不同的数据类型,自动匹配对应的方法。重载在编译的时候就决定调用哪个方法了,和重写不一样。(常见,构造函数重载)。
举个栗子:
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-重载、重写(冷静分析)相关推荐
- 方法重写实例java,java方法重写实例分析
本文实例讲述了java方法重写,分享给大家供大家参考.具体分析如下: 一.方法的重写概述: 1.在子类中可以根据需要对从基类中继承来的方法进行重写. 2.重写的方法和被重写的方法必须具有相同方法名称. ...
- java重载与重写的区别+重写父类equals方法的完美实现
[0]README 0.1) 本文章节[1]和[2]的内容转自 http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html : 旨 ...
- Java——重载和重写
前言 在程序设计中经常会遇到对对方法的重载或者重写,下面将介绍重载和重写. 重载(Overloade) 重载出现的原因 任何程序设计语言都具备的一项重要特性就是对名字的运用.当创建一个对象时,就给对象 ...
- Java的重写和重载机制
Java的重写和重载机制 张磊 zhangleispirit@gmail.com Java的重写和重载是两种在Java中经常提到的两组概念,它们在各个方面都有着很大的不同,本文主要在此做一个归纳总结. ...
- java方法重载_在Python中该如何实现Java的重写与重载
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:清风python PS:如有需要Python学习资料的小伙伴可以加点击 ...
- Java 方法重写与重载的区别 示例 重载多数相加求和 重写toString()和equals()
Java 方法重写与重载的区别 重载:在同一个类中,当方法名相同,形参列表不同的时候 多个方法构成了重载 重写:在不同的类中,子类对父类提供的方法不满意的时候,要对父类的方法进行重写. 名称\属性 E ...
- java 接口 抽象类 继承 重载 重写 多态
4.1 抽象类 在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的. 同时,抽象类体现了数据抽象的思想,是实现多态的一种机制.它定义了一组抽象的方法, ...
- Java - 重载 与 重写 的区别
静态分派与动态分派 1. 静态类型[外观类型] => 方法执行版本 => 编译期确定 2. 实际类型 => 方法执行版本 => 运行期确定 静态解析与动态连接 1. 静态解析: ...
- Java方法重写与重载的区别
Java方法重写(Override)与重载(Overload)的区别(超详细) 首页在我们要学习这个知识点之前,应该要先了解什么是多态? 在最初学习java的时候,人们都知道,java这种面向对象的语 ...
- 11 java 王少飞-Java语言的主要特性分析
Java语言的主要特性分析 1.Java语言是简单的. Java语言的语法与C语言和C++语言很接近,使得大多数 ...
最新文章
- 为什么科技互联网公司越来越重视数学?贾扬清等大牛如是说
- html像素和em转换,初识HTML(5)+CSS(3)-2020升级版 - 像素px:相对单位em:就是本元素给定字...
- boost::fibers::promise用法的测试程序
- Leet Code OJ 191. Number of 1 Bits [Difficulty: Easy]
- java access jdbc_Java连接Access数据库
- 中国信通院金融科技负责人韩涵:大数据是生产资料的变革,区块链是生产关系的变革...
- 圣诞节美食聚会派对海报设计
- 虚拟机 ----- 最小安装如何安装设置ip ,并启用ifconfig命令
- 围棋选手不到30岁就下坡,最大因素是什么?
- 实战分析PHP大马隐藏后门——案例一
- 语音识别百度阿里哪家强?识别率评测
- html css表格制作,CSS 表格(Table)
- 惠普电脑锁屏快捷键怎么设置?
- tomcat HTTP与HTTPS同时开启并且同时可以访问
- 为什么CAD输入文字时文字特别大但输入后就消失了?
- 【转】浅谈程序猿的职业规划,看你如何决定自己的未来吧。
- 【五六七人口普查】省市两级分年龄、性别的人口
- Diango:Django基础
- 怎样调整3dsMax中的样条曲线
- 面向AI应用,美光准备好了!
热门文章
- 十六、Oracle学习笔记:索引和约束(表字段快速查询和约束)
- 做网站买主机还是服务器,做网站买主机还是服务器
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-2.快速搭建SpringBoot项目,采用IDEA...
- mysql-cluster5.7搭建集群(实际测试有效)
- freeCodeCamp:Title Case a Sentence
- 【1083】code[vs] 1083 Cantor表 1999年NOIP全国联赛普及组
- Web---演示Servlet的相关类、下载技术、线程问题、自定义404页面
- 使用Vibrator控制手机振动
- 团队开发——冲刺1.e
- SyntaxHighlighter3.0.83 配置