java重写和重载的区别总结_java覆盖和重载

java重写和重载的区别总结_java覆盖和重载重写只存在于子类与父类中,重载存在于一个类中。具体区别如下:一、重写(override)override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。重写(覆盖)的规则:1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protecte…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

重写只存在于子类与父类中,重载存在于一个类中。

具体区别如下:

一、重写(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.”);

}

}

比较就可以发现多态对重载的优点:如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;如果用多态,则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,在子类里各自实现(重写)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/197729.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 决策树CART算法、基尼系数的计算方法和含义[通俗易懂]

    决策树CART算法、基尼系数的计算方法和含义[通俗易懂]决策树CART算法——基尼系数决策树的CART算法使用基尼系数来选择划分属性。一个数据集的纯度可以用基尼系数来度量Gini(D)=∑k=1∣y∣∑k′≠kpkpk′=1−∑k=1∣y∣pk2\begin{aligned}Gini(D)=\sum_{k=1}^{|y|}\sum_{k'\nek}p_kp_{k'}=1-\sum_{k=1}^{|y|}…

    2022年10月13日
  • Java邮箱正则表达式验证_java正则表达式以什么开头

    Java邮箱正则表达式验证_java正则表达式以什么开头packagecom.Janson.test;/***@authorJanson*/importjava.util.regex.*;publicclasstest{publicstaticbooleancheckEmaile(Stringemaile){/***正则表达式实用规则…

  • WPF Visifire使用

    WPF Visifire使用引言:  由于项目中需要使用Visifire所以自己就写了一些demo,大家一起共享!基础Visifire图表的展示1.Visifire的创建需要引用的DLL包【WPFToolkit.dll;WPFVisifire.Charts;WPFVisifire.Gauges(这个以后会用到)】2.我们开始创建简单的Visifire图表第一步:前台代码

  • Canvas之translate、scale、rotate、skew方法讲解!「建议收藏」

    Canvas之translate、scale、rotate、skew方法讲解!「建议收藏」前面说Canvas大致可以分为三类:1.save、restore等与层的保存和回滚相关的方法;2.scale、rotate、clipXXX等对画布进行操作的方法;3.drawXXX等一系列绘画相关的方法;前面主要讲了drawBitmap方法,并举了一个星球浮动的栗子,在那个例子中,星球有大有小,需要移动,有时候可能需求上还需要旋转或错切,有了这些需求,我们就需要使用到与Canvas相关的translate、scale、rotate、skew这几个方法,平移、缩放、旋转、错切,这四个词听起

    2022年10月24日
  • 感谢读者张舒鳌指出勘误

    感谢读者张舒鳌指出勘误

  • shell中各种括号的作用()、(())、[]、[[]]、{}「建议收藏」

    shell中各种括号的作用()、(())、[]、[[]]、{}「建议收藏」一、小括号,园括号()1、单小括号()①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。②命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号