`
haoranaijiani
  • 浏览: 3014 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

重载和重写

 
阅读更多
java的重写,是指在子类中对父类的某方法进行重新定义,其子类的该方法名以及参数位置和个数均与父类相同,从而在调用子类的该方法时,不会执行父类的方法.如果在父类中以final定义的方法,在子类中无法重写.
重写的主要优点是能够定义某个子类特有的特征:
      如:
     public class Father
     {
              public void speak()
              {
                   System.out.println("Father");
              }                     
     }
      public class Son extends Father
     {
              public void speak()
              {
                   System.out.println("son");
              }                     
     }
   这也叫做多态性,重写方法只能存在于具有继承关系中,重写方法只能重写父类非私有的方法,
  

    当上例中 Father类 speak()方法被private时,Son类不能重写 Father类 speak()方法,此时Son类 speak()方法相当与在Son类中定义的一个speak()方法.
    Father类 speak()方法一但被final时,无论该方法被public,protected及默认所修饰时,Son类根本不能重写 Father类 speak()方法,试图编译代码时,编译器会报错.例:
       public class Father
     {
           fianl  public void speak()
              {
                   System.out.println("Father");
              }                     
     }
      public class Son extends Father
     {
              public void speak()
              {
                   System.out.println("son");
              }                     
     }//编译器会报错.
      
     Father类 speak()方法被时默认修饰时,只能在同一包中,被其子类被重些,如果不在同一包则不能重写.
     Father类 speak()方法被时protoeted时,不仅在同一包中,被其子类被重些,还可以不同包的子类重写.
  

     重写方法的规则:
     1.参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
     2.返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载.
     3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
     4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常.例如,
父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常.


    而重载的规则:
1.必须具有不同的参数列表;
2.可以有不同的返回类型,只要参数列表不同就可以了;
3.可以有不同的访问修饰符;
4.可以抛出不同的异常;


     重写和重载的区别在于:

     重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值.

  用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般.
分享到:
评论

相关推荐

    java中的重载和重写的区别

    Java中的重载(Overloading)和重写(Overriding)是面向对象编程中两个重要的概念,它们体现了Java的多态性。多态性是面向对象编程的三大特性之一,另外两个是封装和继承。 首先,让我们详细解释一下方法的重载。重载...

    Java中重载和重写总结

    Java 中重载和重写总结 Java 中的重载(Overloading)和重写(Overriding)是两个非常重要的概念,它们都是多态性的体现形式。 一、Java 中的重载(Overloading) Java 中的重载是指在同一个类中可以创建多个...

    继承与多态,重载和重写

    总结起来,继承、多态、重载和重写是面向对象编程中的核心概念,它们相互关联,共同构建出灵活、可扩展的代码结构。通过继承,我们可以构建类的层次结构,多态则提供了代码的通用性和灵活性。而重载和重写则是实现...

    Java的重载和重写

    Java编程语言中的重载(Overloading)和重写(Overriding)是两个关键的概念,它们都是多态性的重要体现,但各自有着不同的含义和规则。 首先,我们来详细了解一下方法的重载。重载,简单来说,就是在一个类中定义多个...

    java 函数的重载和重写实例代码

    在Java中,函数的重载(Overloading)和重写(Overriding)是多态性的重要表现形式,它们都是实现面向对象设计原则的关键手段。 1. 重载(Overloading): 重载发生在同一个类中,它允许我们创建多个同名的方法,...

    重载和重写--java

    重载和重写--java

    Java重载和重写的区别--源码实例

    Java中的重载(Overloading)和重写(Overriding)是面向对象编程中的两种关键特性,它们涉及到方法的多态性。理解这两者的区别对于编写高效、可维护的代码至关重要。 **重载(Overloading)**是指在一个类中,可以有多个...

    方法重载和方法重写

    在编程语言中,方法重载(Overloading)和方法重写(Overriding)是两个非常重要的概念,它们都是实现多态性(Polymorphism)的关键机制。本文将深入探讨这两个概念,以及它们在实际编程中的应用。 ### 方法重载...

    Beatles9527#StudyNotes#_12从虚拟机的角度理解重载和重写1

    从虚拟机的角度理解重载和重写说明:本文主要内容都参考至《深入Java虚拟机-周志明著》Class文件的编译过程中不包含传统程序语言编译的连接步骤,一切方法的调用

    重载与覆写/重写的区别

    重写和被重写方法返回值必须相同 * 此方法错误 */ // public double getSides() { // return 3d; // } // end // begin /** * 4. 重写方法抛出的异常必须和被重写方法抛出异常一致,或者是其子类 * 详细见:...

    java面向对象重载和重写

    面向对象是Java编程的核心概念,其中“重载”(Overloading)和“重写”(Overriding)是两个至关重要的概念。理解并熟练运用这两个概念,对于提升Java编程能力至关重要。 首先,我们来探讨“重载”。在Java中,...

    方法的重载和重写1

    在编程语言中,方法的重载(Overloading)和重写(Overriding)是两种不同的多态性表现,它们在类的继承体系中扮演着重要角色。本文将深入探讨这两种概念,以及它们在实际编程中的应用和规则。 首先,我们来看方法...

    Objective-C中的重载和重写详解

    重载、重写和隐藏三者在编程语言中的定义 重载(overload):函数名相同,函数的参数列表不同(包括参数个数和参数类型),至于返回类型可同可不同。重载既可以发生在同一个类的不同函数之间,也可发生在父类子类的...

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

    ### C++中重载与重写函数的区别及虚函数详解...- **虚函数**:用于支持重写和多态性的关键。 通过以上分析可以看出,虚函数、重载和重写在C++中的应用各有侧重,合理利用这些特性可以极大地提高程序的灵活性和扩展性。

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

    在 Java 编程语言中,方法的重载(Overloading)和重写(Overriding)是面向对象编程的重要概念。这两种技术使得方法能够在不同的上下文中表现出不同的行为,从而增强了代码的灵活性和可读性。下面将深入探讨 Java ...

    重载和重写的区别.emmx

    使用mindmaster打开

    linancc#JavaNotebook#重载和重写1

    声明为static的方法不能被重写,但是能够被再次声明。子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。子类和

Global site tag (gtag.js) - Google Analytics