`
woaiyingyu123
  • 浏览: 71249 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

重载与重写

 
阅读更多
Java的重写和重载是两种在Java中经常提到的两组概念,它们在各个方面都有着很大的不同,下面详细介绍你要了解的区别。

Java的多态机制

即重写,重写主要用于子类和父类之间,在父类中定义了一个方法,同时在子类中对这个方法进行重写,实现子类行为的特殊化,例如:
       class Animal{
void eat(){ System.out.print("animal eat");}
   }

   class Tiger extends Animal{
void eat(){System.out.print("Tiget eat");}
}


子类中的eat方法即对父类的eat方法实现了重写,重写最常见的例子就是下面的声明:
 Animal some=new Tiger();

关于重写,遵循以下的规则:

(1)重写方法必须和被重写方法具有相同的参数列表,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。

(2)重写方法的访问控制修饰符不能比被重写方法更严格(比如一个在父类中声明为public的方法重写成一个protected的方法)。

(3)只有实例方法才能被重写,超类中的final方法不能被重写。

(4)重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常。

(5)注意一种特殊情况:如果超类的方法版本中声明了检查异常,但重写的子类方法中没有声明,这时如果使用多态的方式进行调用,那么编译器认为你调用的是声明了异常的方法。

(6)尽管多态是在编译时确定对象的类型,但在编译时,还是根据父类的方法声明进行程序检查。因此,如果子类中定义的方法,在父类中没有定义,则会出项编译错误。

  Java的重载机制:
    重载的实质:在一个类中使用签名相同的多个方法。

按照范围,可以将重载分为在一个类中重载,和在子类和父类中重载。现分别解释如下:

    1.在一个类中定义多个具有相同签名的方法,这些方法必须具有不同的参数列表,比如一个类的构造函数。

    2.在父类和子类中,子类由于继承而拥有了父类的某些方法,此时在子类再定义具有相同签名的方法(必须具有不同的参数列表),这个地方很容易和重写相混淆,因此千万注意。

重载的规则主要记住亮点:
    一是方法的参数列表必须改变,包括参数的类型,参数的个数多少,参数顺序。

二是重载对返回类型,访问修饰符,异常声明没有任何限制,可以作任意的修改。实质上,重载只是创建了一个方法而已,特殊的地方在于方法的名字。

注意下面的一种情况:(重写和重载的混合)
class UseAnimal{
     void doStuff(Animal sa){}
     void doStuff(Tiger sa){}
     public static void main(String[] args){
UseAnimal ua=new UseAnimal();
Animal an=new Tiger();
ua.duStuff(an);
}
}


此时,调用的方法doStuff的Animal版本,因为调用重载方法是在编译时决定的,an的声明类型是Animal。所以调用Animal版本。

始终注意一点:重载的判断始终是在编译时决定。
分享到:
评论

相关推荐

    C++中重载与重写函数区别及虚函数

    ### C++中重载与重写函数的区别及虚函数详解 #### 一、虚函数概述 **1.1 虚函数定义与作用** 在C++中,虚函数是一种特殊的成员函数,它允许子类覆盖父类的行为。虚函数的核心在于实现多态性,即在运行时动态决定...

    java中重载与重写

    在Java编程语言中,方法的重载(Overloading)与重写(Overriding)是两个非常重要的概念。它们虽然只有一字之差,但其实质却大相径庭。理解这两者的不同对于深入掌握Java语言至关重要。 ### 一、重载(Overloading...

    Java方法的艺术:重载与重写的深度解析

    ### Java 方法的艺术:重载与重写的深度解析 在 Java 编程语言中,方法的重载(Overloading)和重写(Overriding)是面向对象编程的重要概念。这两种技术使得方法能够在不同的上下文中表现出不同的行为,从而增强了...

    java中重载与重写的区别.pdf

    Java 中重载与重写的区别 Java 中的重载(Overloading)和重写(Overriding)是两个不同的概念,它们都是 Java 语言中实现多态性的手段。 方法重载(Overloading) 方法重载是让类以统一的方式处理不同类型数据的...

    C#重写重载与多态

    在C#编程语言中,重写、重载和多态是面向对象编程的三大核心特性,它们对于构建灵活、可扩展的代码结构至关重要。 首先,我们来看“重写”。重写(Override)允许子类对从基类继承来的方法进行重新定义,以便提供...

    Java中方法重载与重写的区别

    1、重载  方法的重载是同一个类中多态性的一种表现。  方法重载须遵循如下两条规则  (1)方法名相同。  (2)参数列表不同。  注意:方法的返回值类型不能用来区分重载的方法。这是因为当调用一个方法时...

    java中重载与重写的区别.doc.docx

    重写发生在继承关系中,子类提供了与父类同名且参数列表完全一致的方法。这种行为使得子类可以定制父类的行为,而不仅仅是扩展它。重写的方法必须有相同的名称、返回类型和参数列表,同时,子类方法的访问权限不能...

    java中重载与重写的区别

    Java 中的重载(Overloading)与重写(Overriding)是两个重要的概念,它们都是实现多态性的重要方式,但两者之间存在着显著的区别。 **重载(Overloading)** 重载是指在同一个类中可以有多个同名方法,但这些...

    c++ 重载、覆盖、重写

    ### C++中重载、重写(覆盖)与隐藏的概念及区别 #### 一、引言 在C++面向对象编程中,理解重载、重写(覆盖)以及隐藏的概念至关重要。这些概念不仅有助于我们更好地设计类和继承体系,还能帮助我们避免一些常见的...

    Java中重载与重写,一篇文章快速了解

    在Java编程语言中,"重载"(Overloading)和"重写"(Overriding)是两个非常重要的概念,它们都是面向对象特性的重要体现。理解并掌握这两个概念对于编写高效、可维护的代码至关重要。 首先,我们来谈谈“重载”...

    实例分析java中重载与重写的区别

    【Java中的重载与重写】是面向对象编程中的两个重要概念,它们体现了Java的多态性,但有着明显的区别。 一、重载(Overloading) 1. 重载发生在同一类内部,允许存在多个同名方法,但这些方法的参数列表必须不同,即...

    继承与多态,重载和重写

    【重载与重写】 重载(Overloading)是指在同一个作用域(通常是类)中可以有多个同名的方法,但这些方法的参数列表必须不同(参数的数量、类型或顺序不同)。当调用这个方法时,编译器根据传入的参数类型和数量来...

    Java中重载与重写的对比与区别

    Java中重载与重写的对比与区别 在Java编程语言中,重载(Overloading)和重写(Overriding)是两种不同的编程技术。它们都可以实现多态性,但是在使用和实现方面有着明显的区别。 一、重载(Overloading) 重载是...

    重载与覆写/重写的区别

    重载与覆写/重写的区别 区别 重载 覆写 1 单词 OverLoading Override 2 概念 方法名称相同,参数的类型或个数不同 方法名称相同,参数的类型或个数相 同,返回值类型相同 3 范围 发生在一个类之中...

    C#中重载与重写区别分析

    在C#编程中,面向对象的设计原则是核心概念之一,重载和重写是其中的两个关键特性,它们都是为了实现代码的灵活性和可扩展性。...希望以上内容能帮助你理解C#中重载与重写的区别,进一步提升你的编程技能。

    PHP面相对象中的重载与重写

    在PHP面向对象编程中,重载(Overloading)和重写(Overriding)是两个重要的概念,它们都与多态性有关。...希望本文的内容能够帮助大家更深入地理解重载与重写,进而在实际开发工作中发挥它们的优势。

    java中的重载和重写的区别

    重写发生在父类和子类之间,当子类继承父类时,如果子类定义了一个与父类中已存在的方法同名、同参数列表的方法,那么子类中的这个方法就是对父类方法的重写。重写的主要目的是为了在子类中改变或扩展父类的功能。在...

    Java重写重载线程

    ### Java中的方法重载与重写以及线程概念详解 #### 一、方法重载(Overloading) 在Java中,**方法重载**是指在同一个类中定义多个具有相同名称但参数列表不同的方法。这里提到的“参数列表不同”不仅包括参数的...

Global site tag (gtag.js) - Google Analytics