首页 > 其他分享 >重载和重写的区别,equals与==的区别

重载和重写的区别,equals与==的区别

时间:2023-09-12 21:32:19浏览次数:34  
标签:区别 子类 equals 重载 父类 方法 public

一、重载和重写的区别

1.1 重写(Override)

从字面上看重写就是重新写一遍,其实就是子类继承父类并把父类中的方法重新写一遍。

子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。

public class Father {
    public static void main(String[] args) {
    // TODO Auto-generated method stub Son s = new Son();
    s.sayHello();
    public void sayHello() {
      System.out.println("Hello");
    }
}
    
class Son extends Father{
    @Override
	public void sayHello() {
// TODO Auto-generated method stub 
        System.out.println("hello by ");
    }
}

总结:

1、发生在父类与子类之间

2、方法名、参数列表、返回类型(除子类方法的返回值类型是父类中返回值类型的子类)必须相同

3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public > protected >default >private)

4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查异常

1.2重载(overload)

在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。

重载对返回值类型没有要求,可以相同也可以不同

就是说重载跟返回值类型没有关系,不能通过返回值类型是否相同来判断方式是否为重载

public class father {
  public static void main(String[] args){
    Father f = new Father();
    s.sayHello();
    s.sayHello("hello");
  }
  public void sayHello(){
    System.out.println("Hello");
  }
  public void sayHello(String name){
    System.out.println("Hello " + name);
  }
}

总结:

1、重载是一类类中多态的表现

2、重载要求方法名的参数列表不同(参数类型、参数个数、参数顺序)

3、重载的时候,返回值类型可以相同也可以不同

二、equals与==的区别

2.1 ==

== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指向同一个对象。比较的是真正意义上的指针操作。

1、比较的是操作符两端的操作数是否是同一个对象

2、两边的操作数必须是同一类型的(可以是父子类)才能编译通过

3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true。如:int a = 10 与long b = 10L与double c = 10.0都是相同的,因为他们指向地址为10的堆

2.2 equals

equals用来比较两个对象的类容是否相等,由于所有的类都是继承自java.lang.Object类,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的是==判断。

总结:

所有比较是否相等都用equals,并且在对常量进行比较时把常量写在前面,如:“sun”.equals(str),因为使用object的equals方法时,object可能为null,会报空指针异常

在阿里的代码规范中使用equals,阿里插件默认会识别,并可以快速修改。

三、Hashcode的作用

Java中集合有两类,一类是List,一类是Set。前者有序可重复,后者无序不可重复。

当我们在set中插入数据的时候怎么判断该元素是否存在呢?可以通过equals方法,但是如果元素太多这种方法就会比较慢。

于是有人发明了哈希算法来提高集合中查找元素的效率。

这种方法将集合分成若干个存储区域,每个对象可以计算出一个哈希码,可以将哈希码分组,每组分别对应某个存储区域,根据一个对象的哈希码就可以确定该对象应该存储的那个区域。

HashCode方法可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。

当集合要添加新元素时,先调用这个元素的HashCode方法,能快速定位到它应该放的物理位置。如果这个位置上没有元素,就可以直接存储到这个位置上,不用再进行任何比较;如果这个元素上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不保存了,不相同就散列其它的地址。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。

标签:区别,子类,equals,重载,父类,方法,public
From: https://blog.51cto.com/u_16255459/7448730

相关文章

  • 什么是方法重载?返回值算重载吗?
    在Java中,方法重载是指在同一个类中定义多个方法,它们具有相同的名称但参数列表不同。方法重载的定义如下:publicvoidmyMethod(intarg1){//方法体}publicvoidmyMethod(intarg1,intarg2){//方法体}publicvoidmyMethod(Stringarg1){//方法体......
  • MySQL字符集详解——utf8mb4 & utf8区别?
    字符集详解|JavaGuide(Java面试+学习指南)MySQL字符编码集中有两套UTF-8编码实现:utf8和**utf8mb4**。如果使用utf8的话,存储emoji符号和一些比较复杂的汉字、繁体字就会出错。何为字符集?字符是各种文字和符号的统称,包括各个国家文字、标点符号、表情、数字等等。......
  • 面试题:Mybatis中的#{}和${}有什么区别?这是我见过最好的回答
    面试题:Mybatis中的#{}和${}有什么区别?前言今天来分享一道比较好的面试题,“Mybatis中的#{}和${}有什么区别?”。对于这个问题,我们一起看看考察点和比较好的回答吧!题,看看普通人考察点mybatis是现在企业级开发中经常使用的数据持久层框架,这个问题就是面试官想考察我们对#{},${}......
  • 一图看懂iPhone 15系列:15/Plus/Pro/Pro Max有啥区别?详细配置对比
    距离iPhone15系列发布只剩下2天(北京时间9月13日凌晨1点),即将推出预计分别是iPhone15、iPhone15Plus,以及Pro系列的iPhone15Pro以及iPhone15ProMax。TrendForce集邦汇总了四款新机规格预测。硬件方面,受欧盟订定法案的限制,苹果也将于今年加入Type-C的行列,全新更换C口。iPho......
  • 敏捷项目管理与传统项目管理的区别?一目了然
    从事项目管理行业的人应该都知道,项目管理领域有两种管理方式:传统项目管理和敏捷项目管理。很多人在团队引入敏捷的时候,会有一个疑惑,传统项目管理和敏捷项目管理的区别分别是什么? 什么是瀑布式项目管理?瀑布式项目管理是一种传统的项目管理方式。在瀑布式项目管理中,项目的整体管理过......
  • [标准sql] 内连接和外连接的区别
    连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件。WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条件所选的行。连接可分为以下几类:内连接(典型的连接运算,使用像=或<>之类的比较运算符)。包括相等连接和自然连接。内连接使用比较运算符根据每个表共有的......
  • cookie和session的区别,分布式环境怎么保存用户状态
    1、cookie数据存放在客户的浏览器上,session数据放在服务器上。2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用C......
  • cookie和session的区别,分布式环境怎么保存用户状态
    1、cookie数据存放在客户的浏览器上,session数据放在服务器上。2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOK......
  • 进口化妆品和国产化妆品备案有什么区别呢?
    账号申请上面是有区别的:除了共同需要的资料以外,如果注册和备案人是境外企业的话,那还需要提交以下资料:1,填写境内负责人信息表格;2,境内负责人公证书原件以及授权书原件;境外生产规范资料原件,如果你无法提供原件,那就要提供中国公证机关公证的或者是我国使(领)馆确认的复印件。备案资料差异......
  • setInterval和setTimeout的区别
    在制作网页动态效果时,一定会遇到某些需求,要求某段程序等待多时时间后再开始执行,就像在我们的生活中一样,待会儿再开始做一件事。在JavaScript中主要通过定时器实现此类需求,本文将对定时器做一个概括,正对setTimeout()做一个详细用法总结。一.setInterval与setTimeout的区别setInterva......