【java基础】重载与重写
前言 :
很早的时候,我就知道这两个东西,但是,也仅仅是停留在知道的程度而已,对于什么是重写,什么事重载,还是感到十分的迷惑,迷茫。正好,在软考复习时又经历这两个东西,细心一点,探究了一下,有点收获,借助java程序,想分享给大家
定义:
重载(overload),重载是可使函数、运算符等处理不同类型数据或接受不同个数的参数的一种方法。简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法,目的当然是处理不同类型数据
重写(override或者overwrite),派生类继承基类的方法,因此,在调用对象继承方法的时候,调用和执行的是基类的实现.但是,有时需要对派生类中的继承方法有不同的实现,重写"基类方法就是修改它的实现或者说在派生类中重新编写实现方法
重写一般多发生在不同的类且存在继承关系之间,而重载多是在一个类里或者一块代码段里,由于重载可以在同一个类中定义功能类似的函数,调用方法是通过传递给他们不同参数个数和参数类型来决定具体使用那个方法。这给程序员管理类的相似函数提供了极大的方便
特点
重载:函数名必须相同,返回值可以相同,也可以不同,但是特征标必须不同。
重写:子类与父类某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类,子类函数的访问修饰权限不能少于父类的
举例说明:
package test;
/**
*
* @author 李卫中
*/
public class Test { public static void main(String[] args){
Person person1=new Person(); //new了一个系统默认的Person的构造方法
person1.getInfo();
//************************
person1.name="米老师(1)";
person1.age=19;
person1.getInfo(); //赋值区
//************************
Person person2=new Person("米老师",18); //new是Person的重载的构造方法,内带参数name,age
person2.getInfo();
//**************************
Teacher teacher1=new Teacher();
teacher1.getInfo(); //重写父类Person类的getInfo方法
//**************************
teacher1.name="姜老师1";
teacher1.age=21;
teacher1.sex="女1";
teacher1.getInfo(); //赋值区
//**************************
Teacher teacher2=new Teacher("姜老师",20,"女");
teacher2.getInfo();
}
}
class Person{
String name;
int age; //以上部分为Person类的成员变量 Person(){} Person(String _name,int _age){ //对Person类的Person()构造方法重载,一样的方法名,不 一样的的参数,参数类型
this.name=_name;
this.age=_age; //this,有就近声明原则,也就是说,他离哪个类近,就可以代表那个类( 本类内,代表Person类)
} public void getInfo(){
System.out.println("我叫"+name+"\n"+"我的年龄是:"+age);
}
} class Teacher extends Person{
String sex;
Teacher(String _name,int _age,String _sex){
super(_name,_age);
this.sex=_sex;
}
Teacher(){
super(); //其实,如果没有super的话,编译器会默认去选择父类中没有参数的构造方法
} public String teachBookName(String bookName){
return bookName;
}
public void getInfo(){
System.out.println("我叫"+name+"\n我的年龄是:"+age+"\n我的性别是"+sex); //对父类中的getInfo()方法进行重写,算是一种覆盖
}
}运行结果:
应该很明显了吧。
收获
对于方法重载,就是说,我给你规定个处理某种情况的方法名,而内部具体参数我不做要求,你可以随意定义一个符合你需要的方法,但是要注意,方法名不能变,但是参数值,参数类型,返回值类型,就看你心情了,可以一样,也可以不一样
对于重写,我给你指定了一个方法,包括方法需要的参数类型,这些你是不能动的,但是你可以灵活的去谢你学要的方法,然后父类的方法就被覆盖了,执行子类自己的方法。
小结
感觉现在学习的知识都是对前面的深入和补充,以前我没有即时总结,在这一阶段的工程中,正是我们深入探究为什么的过程,正好可以弥补我们以前的遗憾,好好学习,打牢基础,对我们接下来的学习有百利而无一害
友情提示:如果您想知道运行结果区为何会出现如此情况,或者他们在内存里是怎么做到的,请继续关注我的系列博客(内存分析)
【java基础】重载与重写的更多相关文章
- Java:重载和重写
Java:重载和重写 对 Java 中的 重载和重写 这个概念,做一个微不足道的小小小小结 重载 重载:编译时多态,同一个类中的同名的方法,参数列表不同,与返回值无关. 有以下几点: 方法名必须相同: ...
- Java基础-方法的重写和重载
重载(Overload)和重写(Override) 重载是在同一个类里面,方法名字相同,而参数不同.返回类型可以相同也可以不同.每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表. 重写 ...
- Java的重载和重写差别(面试常见)
今天在看C#的基础知识,同是面向对象的语言.看到重载和重写.我突然想了半天.有点模糊了,立即度娘一番.回忆起自己在北京实习的项目,实际上,开发中经经常使用到重载和重写,自己不去总结罢了.今天找了一份比 ...
- Java中重载和重写的区别
重载 overloading 1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载是一个类中多态性的一种表现. 2) Java的方法重载,就 ...
- java方法重载和重写
1.java的方法重载和重写,表示两种不同的类型.this关键字,出现在类的构造方法中,代表使用该构造方法所创建的对象.,this可以出现在实例方法中核构造方法中.但是不能出现在类方法中.实例方法只能 ...
- 【JAVA】重载和重写的区别
重写(Overriding) 重写规则 1. 参数列表:必须与被重写方法的参数列表完全匹配. 2. 返回类型:必须与超类中被重写的方法中声明的返回类型或子类型完全相同 3. 访问级别:一定不能比被 ...
- JAVA构造器,重载与重写
1. java构造器 构造器也叫构造方法(constructor), 用于对象初始化. 构造器是一个创建对象时被自动创建的特殊方法,目的是对象的初始化. 构造器 的名称与类的名称一致. JAVA通过n ...
- java的重载与重写
原文链接http://zhhll.icu/2020/11/11/java%E5%9F%BA%E7%A1%80/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/%E9%87%8 ...
- 【Java】重载与重写
重载与重写 一.重载 定义 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可.同一个类.相同方法名,参数列表不同:参数个数不同,参数类型不同. Java的重载是可以包括 ...
- Java类方法重载与重写
目录 - 方法重载 - 方法重写 @(Java类方法重载与重写) - 方法重载 1.方法名相同 2.参数列表不同 public void person(double height,double wei ...
随机推荐
- Tesseract-OCR 3.05 躲过语言文字识别(运行程序+中英日韩语言包)
最新版本 静态编译 tesseract 3.05.00dev leptonica-1.73 libgif 5.1.3 : libjpeg 8c : libpng 1.6.16 : libtiff 3. ...
- 配置tomcat的虚拟路径
配置tomcat的虚拟路径有两个地方需要配置,以eclipse为例: ①在tomcat的server.xml中的host节点内添加 <Context path="/meims/user ...
- Mac会给你一些欣喜
Mac会给你一些欣喜 以前一直没有用过Mac,一直都是用Windows的电脑,只是偶尔会去用Ubuntu这样的Linux系统.Mac OS 确实是一只可以给你欣喜的系统. 上周拿到公司分发的Mac,到 ...
- 利用冒泡对List排序
SysMenu是List集合中的类型,在这是一个菜单实体. public List<SysMenu> selfMenuSort(List<SysMenu> list) { fo ...
- RAD Studio/Delphi 2010 3615下载+破解
RAD Studio/Delphi 2010 3615下载+破解 官方下载地址: http://altd.embarcadero.com/download/RADStudio2010/delphicb ...
- python 获取控制台输入
python想从控制台获取输入的的函数有两个一个是raw_input,一个是input. 这两个函数的区别是input获取的时候会精确到类型,假设输入的是1,那么获取的就是int型的变量,如果想输入字 ...
- hdu1162(最小生成树 prim or kruscal)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162 意义:给出一些点,用线问使所有点直接或间接连通,需要多长: 思路:裸最小生成树: 法1: pri ...
- LoadRunner 思考时间与事务响应时间的区别与关系
LoadRunner 思考时间与事务响应时间的区别与关系 思考时间lr_think_time 就是一个事务要开始时思考的时间;比如 你要点击一个 登录按钮 我们都要点击这个按钮要先思考下 就是人为 ...
- SessionState详解 session有效期时间:默认20分
为当前应用程序配置会话状态设置. configuration 元素(常规设置架构) system.web 元素(ASP.NET 设置架构) sessionState 元素(ASP.NET ...
- PHP中比较两个时间的大小与日期的差值
在这里我们全用到时间戳 mktime(hour,minute,second,month,day,year,[is_dst]) 其参数可以从右向左省略,任何省略的参数都会被设置成本地日期和时间的 ...