在java中重载和重写区别,java重载与重写的区别

  在java中重载和重写区别,java重载与重写的区别

  如何解决写爬虫IP受阻的问题?立即使用。

  问: Java 重载与重写是什么?有什么区别?

  答:

  重载(重载)是类以统一的方式处理不同类型数据的一种手段。本质上是指在同一个类中同时存在多个同名但参数个数或类型不同(返回值的类型可以是任意的,返回类型不能作为区分重载函数的标准)的函数,这是一个类中多态性的表现(调用一个方法时通过传递不同的参数个数和类型来决定使用哪个方法的多态性)。

  图一。Android类中一个重载的例子重写(Override)就是父类和子类之间的多态性,本质上是重新定义了父类的功能。如果在子类中定义了与其父类同名、参数相同的方法,将重写该方法,但子类函数的访问修改权限不能小于父类;如果子类中的方法与父类中的方法具有相同的方法名、返回类型和参数表,新方法将覆盖原始方法。如果想要父类中的原始方法,可以使用super关键字。

  图二。Android类中一个常见的重写例子-。

  * *重载规则:* *必须有不同的参数列表;可以有不同的返回类型;可以有不同的访问修饰符;可以抛出不同的异常。

  重写规则:参数列表必须与被重写的方法完全相同,否则不能称为重写;返回类型必须始终与被重写的方法相同,否则不能称为重写;访问修饰符的限制必须大于或等于被重写方法的访问修饰符;被重写的方法不得引发新的检查异常或比被重写的方法声明更广泛的检查异常。例如,如果父方法声明了检查异常IOException,那么在重写此方法时,它不能抛出异常,只能抛出IOException的子类异常,非检查异常可以抛出。

  重载与重写是 Java 多态性的不同表现。

  重写是父类与子类之间多态性的表现,在运行时起作用(动态多态性,譬如实现动态绑定)

  而重载是一个类中多态性的表现,在编译时起作用(静态多态性,譬如实现静态绑定)。

  问:Java 构造方法能否被重写和重载?

  答:

  这是一种覆盖子类以覆盖父类的方法。被重写方法的名称保持不变,而类的构造方法的名称必须与类名一致。假设父类的构造方法可以被子类覆盖,那么子类类名必须和父类的类名一致,所以Java 的构造方法不能被覆盖。重载是针对同一个的,所以构造函数可以重载。

  问:下面程序的运行结果是什么,为什么?

  公开课演示{

  公共布尔等于(演示其他){

  System.out.println(使用演示等于。);

  返回true}

  公共静态void main(String[] args) {

  对象O1=new Demo();

  对象O2=new Demo();

  Demo O3=new Demo();

  Demo O4=new Demo();

  if (o1 .等于(o2)) {

  System.out.println(o1等于o2。);

  }

  if(o3.equals(o4)) {

  System.out.println(o3等于o4。);

  }

  }}回答:以上程序运行结果如下。

  使用演示等于。

  O3等于O4。因为demo类中的public boolean equals (Demoother)方法没有重写object类中的public boolean equals (Objectobj)方法,因为它违反了参数规则,其中一个是Demo类型,另一个是Object类型,所以这两个方法是重载的(发生在编译时)而不是重写的;所以调用o1.equals(o2)时,o2是对象类型参数,实际调用的是Object类中的public boolean equals (Object obj)方法,因为o1和o2在编译时都是对象类型,Object 类的 equals 方法返回false仅通过比较存储器地址;当调用o3.equals(o4)时,实际上调用的是演示类中的equals (Demoother)方法。因为o3和o4在编译时都是演示类型,所以上面的打印是可用的。这就是java重写和重载区别的细节。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: