Java学习笔记17---方法的重载与重写
重载是指,一个类中定义了一个成员方法后,通过修改参数个数、参数类型或参数顺序,重新实现该方法,则这两个方法互为对方的重载方法。
重写是指,子类重新实现父类的成员方法。
重载后的方法,与原方法相比:
(1).方法名相同,参数个数、参数类型及参数顺序至少有一个不同;
(2).返回值类型与访问权限修饰符可以相同也可以不同,只修改这两项不能算重载;
(3).静态成员方法也可以重载,重载后的方法也可以是非静态成员方法;
(4).可以有多个重载方法。
子类重写后的方法,与父类的方法相比:
(1).方法名、参数个数、参数类型及参数顺序必须一致;
(2).返回值类型为基本数据类型时,不可以修改,返回值为类类型时,可以修改,具体参见笔记13;
(3).访问权限修饰符可以修改也可以不修改,如果修改的话,必须要大于父类方法的访问范围;
(4).静态成员方法也可以重写,但重写后的方法只是被隐藏,并未覆盖父类的方法,具体参见笔记12;
(5).一个子类只能重写父类的某个成员方法一次,否则,子类就会出现重名方法,会报错。
重载是同一个类内部的多个成员方法互为重载方法,重写是子类的成员方法重写了父类的成员方法;重载一般是为了创建一组要完成相似任务的成员方法,重写的目的是为了实现多态,实现多态有3个条件:继承、重写、向上转型,缺一不可。
作者: 蝉蝉
请尊重作者劳动成果,转载请在标题注明“转载”字样,并标明原文链接:
http://www.cnblogs.com/chanchan/p/7906876.html
下面是简单的程序示例。
Person类是Student类的父类,TestMain类是测试类,具体代码如下:
Person类的代码:
package human;
public class Person {
String name;
int age;
String gender;
public Person() {
}
//笔记17:重载:方法名不变,参数的个数、类型及顺序至少与原方法有一个不同
//可以更改返回值类型及访问权限修饰符,但不是必须的,只修改这两项也不算重载
public int overLoadP(int i, String s) {
System.out.println("i = " + i + ", " + s);
return i+;
}
// public char overLoadP(int i, String s) {
// return i+1;
// }
//可以更改返回值类型及访问权限修饰符
protected char overLoadP(int i) {
System.out.println("i = " + i);
return (char)(i+);
}
public int overLoadP(int i, int n) {
System.out.println("i = " + i + ", n = " + n);
return i+n;
}
public int overLoadP(String s, int i) {
System.out.println(s + ", i = " + i);
return i;
}
static void overLoadPS() {
System.out.println("静态成员方法可以重载吗");
}
void overLoadPS(int i) {
System.out.println("静态成员方法可以重载");
}
}
Student类的代码:
package human;
public class Student extends Person {
String stuNumber;
int score;
public Student() {
}
//笔记17:重写:方法名、参数的个数、类型及顺序都要与父类方法一致
//子类重写时,只有返回值为类类型时,才可以更改返回类型,且只能改为返回值类型的子类
//子类访问权限修饰符的范围要大于父类的
// public char overLoadP(int i, String s) {
public int overLoadP(int i, String s) {
System.out.println("子类重写:i = " + i + ", " + s);
return i+1;
}
}
TestMain类的代码:
package human;
public class TestMain {
public static void main(String[] args) {
Person per = new Person();
Student stu = new Student();
per.overLoadP(1);
per.overLoadP(1, 2);
per.overLoadP(1, "bokeyuanchanchan");
per.overLoadP("bokeyuanchanchan", 1);
per.overLoadPS(2);
per.overLoadPS();
stu.overLoadP(1,"博客园蝉蝉");
}
输出结果如下:
i = 1
i = 1, n = 2
i = 1, bokeyuanchanchan
bokeyuanchanchan, i = 1
静态成员方法可以重载
静态成员方法可以重载吗
子类重写:i = 1, 博客园蝉蝉
分析如下:
关于重载:
(1).最先定义了public int overLoadP(int i, String s)这个方法,方法名为overLoadP,有两个参数,分别为int型和String型,返回值为int型。
(2).随后又定义了3个重名的方法,分别为:
protected char overLoadP(int i)
public int overLoadP(int i, int n)
public int overLoadP(String s, int i)
这3个方法与原方法的参数不同点分别在于,参数个数不同、参数类型不同、参数顺序不同,这3个方法都是原方法的重载方法,这4个方法互为对方的重载方法。
其中protected char overLoadP(int i),返回值类型与访问权限修饰符也与原方法不同,可见这两项是可以修改的,但只修改这两项并不能算重载,见(3)。
(3).Person类中下面注释掉的代码行,与第1个方法仅返回值不同,会出现“Duplicate method voerLoadP(int, String) in type Person”的错误。也就是说,仅返回值类型不同是不能算重载的。
// public char overLoadP(int i, String s) {
// return i+1;
// }
(4).由结果可知,静态成员方法也可以重载。
关于重写:
(5).子类重写了父类的public int overLoadP(int i, String s),方法名、参数个数、参数类型、参数顺序及返回值类型都与父类一致。
对于代码中注释掉的行,不注释的话会提示返回值类型与父类返回值不一致的错误。
// public char overLoadP(int i, String s) {
Java学习笔记17---方法的重载与重写的更多相关文章
- Java学习笔记之---方法和数组
Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...
- Java学习笔记day05_方法重载
1.方法的重载overload 在同一个类中, 允许出现同名的方法, 只要方法的参数列表不同即可. 参数列表不同: 参数个数不同, 参数类型不同, 顺序不同. public class MethodO ...
- 0019 Java学习笔记-面向对象-方法
方法属于谁 方法要么属于类,要么属于对象 static修饰的方法属于类 没有static修饰的方法属于对象 方法只能定义在类里面,不能独立定义 不能独立的执行方法,要么通过类调用,要么通过方法调用 一 ...
- 【原】Java学习笔记008 - 方法(函数)
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 方法/函数 Met ...
- java学习笔记5(方法)
方法: 1.如何创建方法 修饰符 返回值类型 方法名(参数){被封装的代码段} 2.方法的定义和使用的注意事项: a:方法不能定义在另一个方法里面: b:方法 名字和方法的参数列表,定义和调用时 ...
- java学习笔记13-重写与重载
重写 重写是子类对父类允许访问的方法实现过程进行重新编写,返回值和参数都不能变. 重写方法不能抛出新的检查异常和比被重写方法更加宽泛的异常 访问权限不能比被重写方法低 声明为final的方法不能被重写 ...
- C#学习笔记_11_方法的隐藏和重写
11_方法的隐藏和重写 方法的隐藏 需要使用到关键字:new 方法的重写 虚函数: 使用关键字virtual修饰的函数 虚函数可以被子类隐藏,也可以被子类重写 非虚函数只能被子类隐藏 关键字:over ...
- Java学习笔记之方法重载,动态方法调度和抽象类
一.方法重载 如果子类中的方法与它的超类中的方法有相同的方法名,则称子类中的方法重载超类中的方法,特别是当超类和子类中的方法名和参数类型都相同时,在子类中调用该方法时,超类中的方法会被隐藏.考虑下面程 ...
- Java学习笔记之方法重载
被重载的方法必须具有不同的参数列表.不能基于不同修饰符或返回值类型来重载方法. package welcome; public class TestMethodOverloading { public ...
随机推荐
- Python学习笔记(十三)
Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1 ...
- 解决网络通信中外网和内网之间的通信问题(NAT转换)
本文原址 http://www.cnblogs.com/lidabo/p/3828846.html 在网络编码中会发现程序在局域网中是可以适用的,但是在外网与内网之间和内网与内网之间就不可行.问题就在 ...
- ASP.NET Core 网站发布到Linux服务器(转)
出处;ASP.NET Core 网站发布到Linux服务器 长期以来,使用.NET开发的应用只能运行在Windows平台上面,而目前国内蓬勃发展的互联网公司由于成本的考虑,大量使用免费的Linux平台 ...
- 使用bitset实现毫秒级查询
前言 因为业务要求api的一次请求响应时间在10ms以内,所以传统的数据库查询操作直接被排除(网络io和磁盘io).通过调研,最终使用了bieset,目前已经正常运行了很久 *** bitset介绍 ...
- ELK系列~log4-nxlog-Fluentd-elasticsearch写json数据需要注意的几点
经验与实践 前两篇文章里我们介绍了nxlog的日志收集和转发<ELK系列~Nxlog日志收集加转发(解决log4日志换行导致json转换失败问题)>,今天我们主要总结一下,在与log4和f ...
- Redis基本认识和基础学习-基本命令
Redis 基本介绍 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANS ...
- How to use VisualSVN Server and TortoiseSVN to host your codes and control your codes' version
############################### PART ONE ############################### #1. Introduction of the ...
- 径向基网络(RBF network)
来源:http://blog.csdn.net/zouxy09/article/details/13297881 1.径向基函数 径向基函数(Radical Basis Function,RBF)方法 ...
- Sequence one
Problem Description Search is important in the acm algorithm. When you want to solve a problem by us ...
- Linux学习(十七)压缩与打包
一.关于打包和压缩 打包和压缩的最大意义在于减少文件传输中需要的流量.打包的方式大概有tar命令,zip命令.压缩的方式有gzip,bzip2,xz.tar命令可以通过参数将压缩和打包在一起执行. 二 ...