Java 高频面试题——区分方法的重载与重写

简介: 二者的定义细节:重载的概念:在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可。

Java 高频面试题——区分方法的重载与重写


面试题:区分方法的重载与重写


  • 二者的定义细节:
  • 重载的概念:在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可。
  • 重写的概念:在子类中可以根据需要从父类中继承来的方法进行改造,也称为方法的 重置 、覆盖 。在程序执行时,子类的方法将覆盖父类的方法。


  • 从编译和运行的角度看:
  • 重载:是只允许存在多个同名方法,而这些方法的参数不同。编译器根据方法不同的参数表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。他们的调用地址在编译器就绑定了 。Java 的重载是可以包括父类和子类的,即子类可以重载父类的同名不同参数的方法。
  • 所以对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为 早绑定 或 静态绑定 。
  • 而对于多态,只有等到方法调用的那一刻,编译器才会确定所要调用的具体方法,这称为 晚绑定 或 动态绑定 。


方法的重载


  • 重载的概念:在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可。


  • 重载的特点:与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。


  • 示例:
// 返回两个整数的和
int add(int x, int y) {
  return x + y;
}
// 返回三个整数的和
int add(int x, int y, int z){
  return x + y + z;
}
// 返回两个小数的和
double add(double x, double y){
  return x + y;
}

判断是否是重载:


  • 跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系。


  • 在通过对象调用方法时,如何确定某一个指定的方法:
方法名 ——> 参数列表


方法的重写(override/overwrite)


  • 定义:在子类中可以根据需要从父类中继承来的方法进行改造,也称为方法的 重置 、覆盖 。在程序执行时,子类的方法将覆盖父类的方法。


  • 要求:
  • 子类重写的方法 必须 和父类被重写的方法具有相同的 方法名称 、参数列表 。
  • 子类重写的方法的返回值类型 不能大于 父类被重写的方法的返回值类型。
  • 父类重写的方法的返回值类型是基本数据类型,子类被重写的方法的返回值类型必须是相同的基本数据类型。
  • 子类重写的方法使用的访问权限 不能小于 父类被重写的方法的访问权限。
  • 子类不能重写父类中声明为 private 权限的方法。
  • 子类方法抛出的异常不能大于父类被重写方法的异常。


  • 注意:子类与父类中同名同参数的方法必须同时声明为非 static 的即为重写,或者同时声明为 static 的(不是重写)。因为 static 方法是属于类的,子类无法覆盖父类的方法。
相关文章
|
12月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
636 18
|
12月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
442 4
|
12月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
587 5
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
313 11
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
738 0
|
存储 Java 数据处理
Java映射操作:深入Map.getOrDefault与MapUtils方法
结合 `getOrDefault`方法的简洁性及 `MapUtils`的丰富功能,Java的映射操作变得既灵活又高效。合理地使用这些工具能够显著提高数据处理的速度和质量。开发人员可以根据具体的应用场景选择适宜的方法,以求在性能和可读性之间找到最佳平衡。
410 0
JAVA高频面试题目集锦(6)
JAVA高频面试题目集锦(6)
405 0
JAVA高频面试题目集锦(6)
|
存储 安全 Java
JAVA高频面试题目集锦(5)
JAVA高频面试题目集锦(5)
406 1
JAVA高频面试题目集锦(5)