java的重载和重写实例_java中重写和重载的区别
重写只存在于子类与父类中,重载存在于一个类中。
具体区别如下:
一、重写(override)
override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。
重写(覆盖)的规则:
1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
3、重写的方法的返回值必须和被重写的方法的返回一致;
4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没s有对其进行重写。
6、静态方法不能被重写为非静态的方法(会编译出错)。
二、overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。
重载的规则:
1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
多态的概念比较复杂,有多种意义的多态,一个有趣但不严谨的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。
一般,我们使用多态是为了避免在父类里大量重载引起代码臃肿且难于维护。
继承是子类获得父类的成员,重写是继承后重新实现父类的方法。重载是在一个类里一系列参数不同名字相同的方法。多态则是用基类的引用指向子类的对象。
网上看到一个有趣的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。
下面的例子包含了这四种实现:
//Triangle 继承Shape类
class Triangle extends Shape {
//重写Shape类中的getSides方法
public int getSides() {
return 3;
}
}
//Rectangle 继承Shape类
class Rectangle extends Shape {
//重载Shape类中的getSides方法(在父类中getSide方法中添加了参数)
public int getSides(int i) {
return i;
}
}
//父类
public class Shape {
public boolean isSharp(){
return true;
}
public int getSides(){
return 0 ;
}
public int getSides(Triangle tri){
return 3 ;
}
public int getSides(Rectangle rec){
return 4 ;
}
public static void main(String[] args) {
Triangle tri = new Triangle();
System.out.println("Triangle is a type of sharp? " + tri.isSharp());
//isShape()为父类中的方法,Triangle中没有,所以tri.isSharp()方法为继承父类中的方法
Shape shape = new Triangle();
//new一个对象为Triangle的Shape实例(和new一个对象为dog的animal实例一样理解)
//此为父类的多态
System.out.println("My shape has " + shape.getSides() + " sides.");
}
}
比较就可以发现多态对重载的优点:如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;如果用多态,则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,在子类里各自实现(重写)
java的重载和重写实例_java中重写和重载的区别相关推荐
- 用java比较abc大小的程序_Java中 abc + '/'和abc + /的区别
好吧,写这篇博客又是因为一个有趣的帖子.原问题是"String str = "abc" + '/';和"abc" + "/";的区 ...
- java的对象是什么意思_Java中对象和对象引用的区别,引用、指向是什么意思
Java的变量分为两大类:基本数据类型和引用数据类型. 其中基本类型变量有四类8种:byte short int long float double char boolean,除了8种基本数据类型变量 ...
- java 非法重载_JAVA中重写和重载区别
重写和重载区别 重写方法的规则如下: 参数列表:必须与被重写方法的参数列表完全匹配. 返回类型:必须与超类中被重写的方法中声明的返回类型或子类型完全相同 访问级别:一定不能比被重写方法强,可以比被重写 ...
- java方法重载和重载方法_Java中的方法重载
java方法重载和重载方法 The concept of Method Overloading in Java is where a class can have multiple methods w ...
- java中函数的重载_Java中函数的重载
函数的重载 1.同一个类 2.同名函数 3.参数个数不同或者参数类型不同 4.java是严谨性语言,如果函数出现的调用的不确定性,会编译失败. public static int add(int a, ...
- java equals重写原则_java中为何重写equals时必须重写hashCode方法详解
前言 大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白. 在上一篇博文Ja ...
- java构造函数的重载_Java中的构造函数重载 - Break易站
Java 构造函数 Java中的构造函数重载 除了重载方法外,我们还可以在java中重载构造函数.基于新执行时指定的参数调用重载的构造函数. 我们什么时候需要构造函数重载? 有时候需要用不同的方式初始 ...
- java 两个运算符重载_Java中的操作符重载
0.Java操作符重载 Java中我们可以执行如下语句: String fullName = "hongliang "+"cao"; System.out.pr ...
- java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析
本文实例分析了java中成员变量与局部变量区别.分享给大家供大家参考.具体分析如下: 成员变量:在这个类里定义的私有变量,属于这个类. 创建以及使用成员变量 public class Person { ...
- java子类访问父类私有成员_Java中子类可以继承父类的私有成员,但是不能(直接)访问!!!...
今天学习Java三大特征之一:继承的时候,产生了一些疑问,最后通过网上查找和各位网友的帮助,终于拔开云雾见日出.下面进入正题: 首先:子类对象拥有父类中的所有属性和方法:在这里,很多人会问构造器可以继 ...
最新文章
- 程序性能监控分析工具
- HTML与XHTML的区别
- Android killer软件闪退的解决办法?
- 遍历列表python_Python 遍历List的三种方法
- AGP Aperture Size UMA Frame Buffer Size
- 北京市通州区谷歌卫星地图下载
- scipy.ndimage.measurements.find_objects()
- HTML5之 Microdata微数据
- 使用zepto实现QQ消息左滑删除效果
- Packet Tracer - 配置 EtherChannel
- 支付宝被罚18万元;金立副总裁回应60亿广告费;苹果再遭专利诉讼丨价值早报
- Eclipse Debug: Drop to Frame
- Android——加速传感器(ACCELEROMETER)的应用
- 银联unionpay取消订单与超时时间
- 联想 Lenovo PWR-G60 无线掌中宝拆机
- 阿里园区今天开了个奇怪的诊所
- Anaconda下安装opencv
- MATLAB代码:计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度
- 移动安全逆向笔记 03:Androidkiller的使用+常见的破解工具
- 卫健委中高风险地区查询
热门文章
- 第七周作业-任务分解
- 运放输入偏置电流方向_运算放大器的输入偏置电流
- 什么是动态与静态IP
- php中拼音转汉字,php 汉字拼音如何转换
- 利用两台苹果电脑实现扩展屏幕【双屏】
- 抓取手机端app日志的方法总结
- UVALive(LA) 4487 Exclusive-OR(带权并查集)
- 17.1.1 颜色和 RGBA 值
- word转03版本公式变成图片_word2013公式编辑器_Word 2013保存的时候突然发现公式变成图片怎么办?_word文档打字的时候...
- 用Nginx在win2008服务器部署ssl后xmlhttp异常(msxml6.dll 错误 ‘80072f7d‘ )的解决方法