java面向对象(四)之重写、重载

简介: 重载定义  重载:在一个类中,存在多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载。  编译器会根据实际情况挑选出正确的方法,如果编译器找不到匹配的参数或者找出多个可能的匹配就会产生编译时错误,这个过程被称为重载的解析。

重载

定义

  重载:在一个类中,存在多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载。

  编译器会根据实际情况挑选出正确的方法,如果编译器找不到匹配的参数或者找出多个可能的匹配就会产生编译时错误,这个过程被称为重载的解析。

 注:重载和修饰词、返回值无关,只与参数的个数、类型、顺序有关。

  与参数的个数、类型大家都清楚,与顺序有关的例子如下,大家忘了的可以试下

public class Test{  
  public void sum(int i,String j){  
  }  
  public void sum(String j,int i){  
  }  
} 

说明:在Test类中有两个同名的方法。在调用方法时,如果传入的第一个参数类型为int,第二个参数类型为String,则自动调用第一个方法sum。如果传入的第一个参数为String类型,第二个参数类型为int,则自动调用第二个方法sum。

特点

1、必须是两个以上同名的方法
2、方法之间的参数组合必须不同(参数的数目不同或者参数的类型不同)
3、方法的返回值不能作为判断方法之间是否构成重载的依据

作用

方法重载就是对不同数据类型的的数据实现相似的操作。

比如我们输出语句就是典型的例子,重载的方法特别多。

重写

定义

在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。

  注:如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

重写的规则

  重写不能破坏父类的访问性和逻辑结构性。

  • 重写规则之一:重写方法不能比被重写方法限制有更严格的访问级别。(即子类中的权限不能小于父类的权限)
    例子:
public class A {
    protected void hello() {
    }
}
class B extends A{
    private void hello() {  
    }
}

报错,父类方法是包访问权限,子类的重写方法是private访问权限,权限太小了

public class A {
    public void hello() {
    }
}
class B extends A{
    void hello() {  
    }
}

报错,出错的原因就是:没有加任何访问修饰符的方法具有包访问权限,包访问权限比public当然要严格了,所以编译器会报错的。

  • 重写规则之二: 参数列表必须与被重写方法的相同。

  • 重写规则之三:返回类型必须与被重写方法的返回类型相同。

  • 重写规则之四:重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。

    • 注意:这种限制只是针对检查异常,至于运行时异常RuntimeException及其子类不再这个限制之中。
  • 重写规则之五: 不能重写被标识为final的方法。

  • 重写规则之六:如果一个方法不能被继承,则不能重写它。如private方法

作用

  重写是为了增强类的重用性和复用性,扩展性;重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西。

重载重写区别

  •   方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。

  •   重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;

  •   重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。

  •   重载对返回类型没有特殊的要求。

相关文章
|
15天前
|
开发框架 算法 Java
Java方法重写(Override)与重载(Overload)的详细对比
在Java编程中,多态性是面向对象编程的核心概念之一。Java通过两种重要的机制来实现多态:方法重写(Override)和方法重载(Overload)。虽然这两个概念都与方法的不同实现有关,但它们在本质上有很大的区别。本文将详细对比这两种机制,帮助开发者更好地理解和应用它们。
44 5
|
1天前
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
31 15
|
3月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
47 1
|
4月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
42 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
4月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
75 2
|
5月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
62 5
|
6月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
56 4
|
5月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
44 0
|
6月前
|
Java 编译器 数据安全/隐私保护
Java 重写(Override)与重载(Overload)详解
在 Java 中,重写(Override)和重载(Overload)是两个容易混淆但功能和实现方式明显不同的重要概念。重写是在子类中重新定义父类已有的方法,实现多态;重载是在同一类中定义多个同名但参数不同的方法,提供多种调用方式。重写要求方法签名相同且返回类型一致或为父类子类关系,而重载则关注方法参数的差异。理解两者的区别有助于更好地设计类和方法。
651 1