重载是指,一个类中定义了一个成员方法后,通过修改参数个数、参数类型或参数顺序,重新实现该方法,则这两个方法互为对方的重载方法。

重写是指,子类重新实现父类的成员方法。

重载后的方法,与原方法相比:

(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---成员方法的重载与重写的更多相关文章

  1. Java学习笔记17---方法的重载与重写

    重载是指,一个类中定义了一个成员方法后,通过修改参数个数.参数类型或参数顺序,重新实现该方法,则这两个方法互为对方的重载方法. 重写是指,子类重新实现父类的成员方法. 重载后的方法,与原方法相比: ( ...

  2. 1.3(java学习笔记)构造方法及重载

    构造方法,用于对象的初始化,在创建对象时被自动调用的特殊方法.构造方法名称与类名一致,通过new调用. 下面通过代码来详细讲解 public class Point { int x, y; publi ...

  3. java学习笔记17(Calendarl类)

    Calendar类:(日历) 用法:Calendar是一个抽象类:不能实例化(不能new),使用时通过子类完成实现,不过这个类不需要创建子类对象,而是通过静态方法直接获取: 获取对象方法:getIns ...

  4. java学习笔记13-重写与重载

    重写 重写是子类对父类允许访问的方法实现过程进行重新编写,返回值和参数都不能变. 重写方法不能抛出新的检查异常和比被重写方法更加宽泛的异常 访问权限不能比被重写方法低 声明为final的方法不能被重写 ...

  5. Java学习笔记17(面向对象十:综合案例)

    在面向对象这个专题的最后 结合前面多篇文章,用到了面向对象的很多方面知识,做了一个简单的案例: 饭店案例: package hotel; /* * 酒店的员工类 * 员工共同特点:姓名,工号,工作方法 ...

  6. 1.8(java学习笔记)继承与方法的重写

    继承 在java中可以通过继承提高代码的复用率. 例如A继承了B,就可以是 例如,首先有一个类似Person,这个类中有有一些属性和方法,我们再新建一个Student类,其中有一部分属性和方法与Per ...

  7. golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍

    golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍 go语言爬虫框架:gocolly/colly,goquery,colly,chrom ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  10. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

随机推荐

  1. word中已删除设置是否显示

        我们打开别人发过来的文档时经常会出现如下图所示,其实这个不是文档的异常,只是word设置显示了修订版标记,如果我们需要去除这个,只需要在审阅-修订功能下面选择显示最终版即可(测试用的10版,其 ...

  2. 关于java@Override错误

    重写的接口的方法,编译的时候一直报@override is not override a method from superclass,查了一下资料,这个@override报错是因为版本的原因. 在J ...

  3. STM32开发-MDK新建工程及配置

    本人也是接触stm32没多久,之前用的MDK是5.1,现在用的是5.13,MDK5.0之前的版本(本人简称旧版)和之后的版本(本人简称新版)新建工程有很大区别.对于刚开始用学stm32的新手来说,基本 ...

  4. 【HHHOJ】ZJOI2019模拟赛(十三)03.10 解题报告

    点此进入比赛 得分: \(97+0+10=107\) 排名: \(Rank\ 3\) \(Rating\):\(+47\) \(T1\):[HHHOJ187]Hashit(点此看题面) 容易想到可以用 ...

  5. vuejs动态组件和v-once指令

    场景,点击某个按钮,两个子组件交替显示 <div id='root'> <child-one v-if='type==="child-one"'></ ...

  6. linux命令之awk命令

    awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linu ...

  7. 使用 NetBackup 命令创建 Hyper-V 策略(命令创建其他策略也是如此)

    Veritas NetBackup™ for Hyper-V 管理指南 Product(s): NetBackup (8.1) 使用 NetBackup 命令创建 Hyper-V 策略 本主题介绍如何 ...

  8. 2017.11.9 如何利用JS做登陆验证界面

    ()案例----JavaScript实现输入验证 需要验证的表单输入域和要求 用户名不能为空,是否符合规定的格式 密码长度是否超过6,两次密码输入一致 邮箱地址:邮箱地址必须符合邮箱形式 ~~~注意提 ...

  9. 20145238-荆玉茗 《Java程序设计》第8周学习总结

    20145238 <Java程序设计>第8周学习总结 教材学习内容总结 第15章 通用API 15.1.1 ·java.util.logging包提供了日志功能相关类与接口,使用日志的起点 ...

  10. 剑指offer17 合并两个排序的链表

    错误代码: 最后两个if语句的目的是,最后一次迭代,两个链表中剩下的直接连接最后一次比较的数值,同时也是迭代停止的标志.虽然大if语句中比较大小得到的Node是正确的值,但每次迭代只要pHead2不为 ...