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 ...
随机推荐
- appium python ios 自动化
mac下搭建appium python selenium来针对ios应用进行自动化测试,并不是官网上的例子,自己程序调试成功. 前言:因为appium的安装前要先确定nodejs的安装.python的 ...
- win10 uwp clone
clone 可以用MemberwiseClone来复制一个类 但这个复制是浅复制,创建一个新的object然后复制值字段,对于引用就直接复制引用,不复制引用的本身,指向同样引用 如果要复制引用,可以使 ...
- 三种方式设置特定设备UWP XAML view
开发者可以设置UWP特定设备xaml view,在桌面,手机,Iot,这个对于设置对不同设备的不同屏幕有用.我们可以使用RelativePanel,VisualStateTriggers,但是这样我们 ...
- 关于EF Code First模式不同建模方式对建表产生的影响
今天在学EF Code First模式的时候,发现几个很有趣的问题,问题如下: 1.当编写玩实体后,不指定任何主键约束,EF会找长的最像Id的,然后设置其为主键,验证代码如下: //User类 cla ...
- Redis 学习笔记-应用场景
Redis作缓存系统 Redis可以对每个键设置生存时间 可以限定数据占用的最大内存空间,在数据达到空间限制后可以按照一定规则自动淘汰不需要的键. 设置方法: 修改配置文件的maxmemory参数,限 ...
- 【JAVA零基础入门系列】Day10 Java中的数组
什么是数组?顾名思义,就是数据的组合,把一些相同类型的数放到一组里去. 那为什么要用数组呢?比如需要统计全班同学的成绩的时候,如果给班上50个同学的成绩信息都命名一个变量进行存储,显然不方便,而且在做 ...
- Java规范推荐
Java规范推荐 推荐:http://blog.csdn.net/tristansmile/article/details/7989670 命名规范 项目名:全部小写 Package 的命名:应该都是 ...
- $(window).on("load",function(){} 和 $(document).ready(function() {}
$(window).on("load",function(){ //页面属性,图片,内容完全加载完,执行 } $(document).ready(function() { 或者$( ...
- 机器翻译评测——BLEU算法详解
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/7679284.html 前言 近年来,在自然语言研究领域中, ...
- 在CentOS 7.3 中安装 NVIDIA GT730 显卡驱动
主机: Dell OptiPlex 390 MT (i5) 系列: 显卡: 技嘉(GIGABYTE) GV-N730D5-2GI 902MHz/5000MHz 2GB/64bit GDDR5 显卡 ( ...