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.”);
}
}
比较就可以发现多态对重载的优点:如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;如果用多态,则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,在子类里各自实现(重写)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/197729.html原文链接:https://javaforall.cn
相关文章
- java中打印数组的方法_Java数组方法–如何在Java中打印数组
- java scanner怎么用_Java中Scanner类的用法及使用步骤分享!「建议收藏」
- java中重载和重写的区别
- JAVA重写和重载的区别「建议收藏」
- JAVA环境变量配置步骤详细教程
- java和基岩版区别_我的世界基岩版与Java版有什么区别?「建议收藏」
- Java基础入门笔记03——用户交互Scanner类,程序三大结构,反编译,增强for,Java中没有goto
- java 重写和重载的区别[通俗易懂]
- java——运行时多态/动态绑定 重写和重载的区别
- JAVA生成uuid_java接口default方法
- Java学习-如何编译适配java版本的jar包
- 运筹学教学|运输问题代码分享(Java代码及详细注释)
- Java多线程下载文件详解编程语言
- java 标准输出与标准错误 out与 err 区别 用法 联系 java中的out与err区别 System.out和System.err的区别 System.out.println和System.err.println的区别 Java重定向System.out和System.err详解编程语言
- Java与Oracle的完美结合(java和oracle)
- 策略针对Redis Java环境的有效过期策略(redisjava过期)
- Java数据库之MySQL学习使用教程(mysql中java教程)
- Oracle与Java程序融合谱写成功曲(java程序Oracle)
- Oracle搭建Java开发环境的步骤(oracle中java)
- java模拟post请求登录猫扑示例分享
- 实例分析java中重载与重写的区别
- java中重载,继承,重写和多态的区别