方法重写和方法重载的区别
目录
一.方法重载(overloading)
二.重载的规则
三.方法重写(overriding)
四.重写的规则
五、访问修饰符
六、总结
重写与重载之间的区别
方法重载:
方法重写:
一.方法重载(overloading)
方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。
方法的重载在实际应用中也会经常用到。不仅是一般的方法,构造方法也可以重载。
在方法重载时,方法之间需要存在一定的联系,因为这样可以提高程序的可读性,一般只重载功能相似的方法。
当Java调用一个重载方法是,参数与调用参数匹配的方法被执行。在使用重载要注意以下的几点:
- 在使用重载时只能通过不同的参数列表,必须具有不同的参数列表。
- 不能通过访问权限、返回类型、抛出的异常进行重载。
- 方法的异常类型和数目不会对重载造成影响。
- 可以有不同的返回类型,只要参数列表不同就可以了。
- 可以有不同的访问修饰符。
- 可以抛出不同的异常。
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型呢?可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
只能重载构造函数
二.重载的规则
重载方法参数表必须不相同;
重载方法可以在一个类中或其他类中;
重载方法方法名必须相同;
重载方法与返回值类型和访问修饰符无关;
//创建一个方法
public void study(){System.out.println("好好学习");
}//方法名相同,参数不同
public void study(String name){System.out.println("好好学习天天向上");
}//与返回值和访问修饰符无关
private String study(String name,String type){System.out.println("好好学习天天向上!!!");return name;
}
三.方法重写(overriding)
在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。
子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。
重写体现了Java优越性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。
在Java中覆盖继承父类的方法就是通过方法的重写来实现的。所谓方法的重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型。
此时,通过使用super关键字就可以实现这个功能,super关键字可以从子类访问父类中的内容,如果要访问被重写过的方法,使用“super.方法名(参数列表)”的形式调用。
如果要使用super关键字不一定非要在方法重写之后使用,也可以明确地表示某个方法是从父类中继承而来的。使用super只是更加明确的说,要从父类中查找,就不在子类查找了。
重写的好处在于子类可以根据需要,定义特定于自己的行为。
也就是说子类能够根据需要实现父类的方法。
四.重写的规则
方法重写参数表必须相同;
方法重写方法名必须相同;
方法重写必须继承父类,是父类的子类;
方法重写返回值相同或者是其子类;
方法重写访问修饰符不能比父类更严格;
在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。换句话说,重写方法一定不能抛出新的检查异常,或者比被重写方法声明更加宽泛的检查型异常。
//动物类--父类
class Animal(){private void run(){System.out.println("动物在跑");}
}
//狗类--子类
class Dog extends Animal(){public void run(){System.out.println("狗在跑");}
}//测试类
public class DogTest(){public static void main(String[] args){//创建动物类对象Animal animal = new Animal();//创建狗类对象Dog dog = new Dog();//调用方法animal.run();dog.run();}
}//运行结果
//动物再跑
//狗在跑
请观看下面一组代码:
class Animal{public void run(){System.out.println("动物在跑");}
}
class Dog extends Animal{public void run(){System.out.println("狗在跑");}public void bark(){System.out.println("狗可以吠叫");}
}
public class TestDog{public static void main(String args[]){Animal a = new Animal(); // Animal 对象Animal b = new Dog(); // Dog 对象a.run();// 执行 Animal 类的方法b.run();//执行 Dog 类的方法b.bark();}
}
//以上实例编译运行结果如下:
TestDog.java:30: cannot find symbol
symbol : method bark()
location: class Animalb.bark();
该程序将抛出一个编译错误,因为b的引用类型Animal没有bark方法。
Super关键字的使用
当需要在子类中调用父类的被重写方法时,要使用super关键字。
class Aniaml(){public class study(){//super.方法名super.run(); System.out.println("狗在跑");}
}
五、访问修饰符
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
private | √ | × | × | × |
默认 | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
六、总结
重写与重载之间的区别
方法重载:
- 同一个类中
- 方法名相同,参数列表不同(参数顺序、个数、类型)
- 方法返回值、访问修饰符任意
- 与方法的参数名无关
方法重写:
- 有继承关系的子类中
- 方法名相同,参数列表相同(参数顺序、个数、类型),方法返回值相同
- 访问修饰符,访问范围需要大于等于父类的访问范围
- 与方法的参数名无关
区别点 | 重载方法 | 重写方法 |
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
方法重写和方法重载的区别相关推荐
- Java中方法重写和方法重载的6个区别?
文章合集:gitee.com/mydb/interv- 方法重写(Override)和方法重载(Overload)都是面向对象编程中,多态特性的不同体现,但二者本身并无关联,它们的区别犹如马德华之于刘 ...
- 方法重写 override 和 new 的区别 [C#]_lucky dog_百度空间
方法重写 override 和 new 的区别 [C#]_lucky dog_百度空间 Good new 来源:http://hi.baidu.com/luosiyong/item/02133dcf1 ...
- 27、Python 面向对象(创建类、创建实例对象、访问属性、内置类属性、对象销毁、类的继承、方法重写、基础重载方法、运算符重载、类属性与方法、下划线双下划线)
27Python面向对象(Python2) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. ...
- 手把手教我班小姐姐学java之方法重写与方法重载
方法重写 子类从父类中继承方法.有事,子类需要修改父类中定义的方法的实现,这就是方法重写. 重写的好处在于子类可以根据需要,定义特定于自己的行为. 在面向对象原则里,重写意味着可以重写任何现有方法.实 ...
- C++学习笔记24,方法重写与方法隐藏
该博文仅用于交流学习.请慎用于不论什么商业用途.本博主保留对该博文的一切权利. 博主博客:http://blog.csdn.net/qq844352155 转载请注明出处: 方法重写.是指在子类中又一 ...
- ArrayList的remove方法(重写equals方法) 与LinkedList的常用操作
package C12_18;import java.util.ArrayList;public class joy {public static void main(String[] args) { ...
- java如何重写onestring,44 java toString 方法 重写equals 方法
package com.wjl.zy131227; /** * 打印对象 * toString 方法 * @author Administrator * */ public class ToStrin ...
- 封装一个新闻类News,包含新闻标题,新闻作者,新闻内容,新闻类型三个属性,提供必要的访问器和修改器方法重写toString方法,要求打印对象时输出格式为“标题;
封装一个新闻类News,包含新闻标题,新闻作者,新闻内容, 新闻类型三个属性,提供必要的访问器和修改器方法,重写toString方法, 要求打印对象时输出格式为"标题:类型:作者" ...
- 如何在Odoo创建新数据的时候添加自己的方法 - 重写create方法
相信有一些小伙伴在使用odoo的时候,需要在创建数据的同时给一些数据自动赋值,虽然在使用onchange方法也基本可以实现需求,但是总是在一些特色的想法的onchange是不能满足需求的. odoo自 ...
- Java方法重写与重载的区别
Java方法重写(Override)与重载(Overload)的区别(超详细) 首页在我们要学习这个知识点之前,应该要先了解什么是多态? 在最初学习java的时候,人们都知道,java这种面向对象的语 ...
最新文章
- Android开源项目发布jCenter
- Android之自定义View以及画一个时钟
- java编程东西好多记不住_课程总结
- ios15使用纯代码计算cell的高度
- sql 日期和当前日期时间差_详解PostgreSQL 如何获取当前日期时间
- 【软考高项】信息系统项目管理师 论文写作技巧分享 (上)
- 如何使用rollup打包前端组件/库
- leetcode刷题:除自身以外数组的乘积
- html中text函数,text函数的使用方法
- 小程序入门学习13--云函数与数据库02
- 什么是hibernate N+1查询
- 机器学习—线性回归推广及案例
- IMPORT MULTIPLE JS
- JavaScript的学习指南
- Python对象与json数据的转换
- zend调试php,Zend Studio使用教程:在Zend Studio中调试PHP(4/5)
- Dockerfile概念简介
- 经典蓝牙inquiry与inquiry scan
- ibm tivoli_使用Tivoli Access Manager的多租户云解决方案中的访问控制最佳实践
- C#里的进制与ASCII转换