【Java开发指南 | 第二十五篇】Java 重写(Override)与重载(Overload)

简介: 【Java开发指南 | 第二十五篇】Java 重写(Override)与重载(Overload)

Java 重写(Override)与重载(Overload)

重写(Override)是指子类定义了一个与其父类中具有相同名称、参数列表和返回类型的方法,并且子类方法的实现覆盖了父类方法的实现。


重写使得子类能够根据需要实现父类的方法,在使用子类对象调用该方法时,将执行子类中的方法而不是父类中的方法。


方法的重写规则

1、重写的方法必须具有与被重写方法相同的参数列表。因此,首先要确保参数列表的匹配程度。


2、虽然Java 5及更早版本要求返回类型必须相同,但Java 7及更高版本允许返回类型不同,但必须是父类返回值的派生类。因此,在重写方法时要考虑返回类型的兼容性。


3、子类中重写的方法的访问权限不能比父类中被重写方法的访问权限更低。例如,如果父类的方法是public的,那么子类中重写的方法不能声明为protected。


4、只有非final的方法才能被重写,因此要确保被重写的方法不是final。


5、重写的方法能够抛出任何非强制异常,但不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常。


6、静态方法和私有方法不能被重写,只能被再次声明。因此,在考虑重写时,这些方法不需要考虑在内。


7、子类和父类在同一个包中或不同包中会影响能否重写方法的访问权限。


8、构造方法不能被重写,因此不需要考虑在内。


示例:


class Animal{
   public void iii(){
      System.out.println("动物");
   }
}
class Dog extends Animal{
   public void iii(){
      System.out.println("狗");
   }
}
public class Ice{
   public static void main(String args[]){
      Animal a = new Animal(); // Animal 对象
      Animal b = new Dog(); // Dog 对象
      a.iii();// 执行 Animal 类的方法
      b.iii();//执行 Dog 类的方法
       //b属于Animal类型,但是它运行的是Dog类的move方法。
   }
}



Super 关键字的使用

在一般情况下,当需要在子类中调用父类的被重写方法时,通常会使用 super 关键字。这样做可以确保调用的是父类的方法而不是子类的方法。


class animal{
  public void a() {
  System.out.println("sleep");
  }
}
class dog extends animal
{
  public void a()
  {
  //super.a();
        //由于没有使用super,因此不调用父类方法
  System.out.println("dog");
       
  }
}
public class Ice{
  public static void main(String args[])
  {
  animal b=new dog();//dog对象
  b.a();
  }
}





调用了父类的方法:




重载(Overload)

重载(Overloading)是Java中一种编程技术,它允许在同一个类中定义多个方法,这些方法具有相同的名称,但参数列表不同的情况。在重载的方法中,参数列表的个数、类型或顺序必须不同。


重载规则:


1、被重载的方法必须改变参数列表(参数个数或类型不一样);


2、被重载的方法可以改变返回类型;


3、被重载的方法可以改变访问修饰符;


4、被重载的方法可以声明新的或更广的检查异常;


5、方法能够在同一个类中或者在一个子类中被重载。


6、无法以返回值类型作为重载函数的区分标准。


示例:


public class Ice {
  //在Ice类中定义多个方法,这些方法具有相同的名称,但参数列表不同
    public int test(){
        return 0;
    }
    public void test(int a){
        System.out.println(a);
    }   
    public String test(int a,String s){
        return "s1";
    }   
    public String test(String s,int a){
        return "s2";
    }   
    public static void main(String[] args){
        Ice o = new Ice();
        System.out.println(o.test());
        o.test(1);
        System.out.println(o.test(1,"Ice"));
        System.out.println(o.test("Ice",1));
    }
}




重写与重载之间的区别

重写是父类与子类之间多态性的一种表现,而重载是多态性的具体表现形式之一。


区别点 重载方法 重写方法

参数列表 必须修改 一定不能修改

返回类型 可以修改 一定不能修改

异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常

访问 可以修改 一定不能做更严格的限制(可以降低限制)


目录
相关文章
|
2月前
|
Java 编译器 数据安全/隐私保护
Java 重写(Override)与重载(Overload)详解
在 Java 中,重写(Override)和重载(Overload)是两个容易混淆但功能和实现方式明显不同的重要概念。重写是在子类中重新定义父类已有的方法,实现多态;重载是在同一类中定义多个同名但参数不同的方法,提供多种调用方式。重写要求方法签名相同且返回类型一致或为父类子类关系,而重载则关注方法参数的差异。理解两者的区别有助于更好地设计类和方法。
|
3月前
|
Java
【Java基础面试十八】、说一说重写与重载的区别
这篇文章阐述了Java中重写与重载的区别:重载是同一个类中方法名相同但参数列表不同的方法之间的关系,而重写是子类中方法与父类中相同方法名和参数列表的方法之间的关系,且子类的返回值应小于等于父类,访问修饰符应大于等于父类。
【Java基础面试十八】、说一说重写与重载的区别
|
3月前
|
Java
Java 新手入门:重载和重写傻傻分不清?一篇文章带你清晰理解!
Java 新手入门:重载和重写傻傻分不清?一篇文章带你清晰理解!
37 0
Java 新手入门:重载和重写傻傻分不清?一篇文章带你清晰理解!
|
3月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
45 0
|
3月前
|
Java
描述 Java 中的重载和重写
【8月更文挑战第22天】
19 0
|
6月前
|
Java 编译器
Java的重载与重写的区别
Java的重载与重写的区别
|
Java 编译器
【面试题精讲】Java重载和重写有什么区别?
【面试题精讲】Java重载和重写有什么区别?
|
前端开发 Java
店铺业务场景分析、BigDecimal是Java提供的一个不变的、任意精度的有符号十进制数对象。它提供了四个构造器,有两个是用BigInteger构造、接口怎么使用的、重载与重写的区别?分别是什么?
店铺业务场景分析 一、协同店铺、竞争店铺极海数据返回给前端数据结构不一样 导入的数据结构 很有可能和自定义采集得到的数据结构不一样
183 1
店铺业务场景分析、BigDecimal是Java提供的一个不变的、任意精度的有符号十进制数对象。它提供了四个构造器,有两个是用BigInteger构造、接口怎么使用的、重载与重写的区别?分别是什么?
|
前端开发 Java 编译器
「Java 路线」| 方法调用的本质(含重载与重写区别)
「Java 路线」| 方法调用的本质(含重载与重写区别)
66 0
「Java 路线」| 方法调用的本质(含重载与重写区别)
|
Java 编译器
java方法的重载要求与作用,重载与重写的区别
java方法的重载要求与作用,重载与重写的区别
269 0