zoukankan      html  css  js  c++  java
  • Java重载和重写的区别

    重载(Overloading)

      重载发生在本类,方法名相同,参数列表不同,与返回值无关,只和方法名,参数列表,参数的类型有关。

      重载(Overload):首先是位于一个类之中或者其子类中,具有相同的方法名,但是方法的参数不同,返回值类型可以相同也可以不同。

      (1):方法名必须相同

      (2):方法的参数列表一定不一样

      (3):访问修饰符和返回值类型可以相同也可以不同。

      其实简单而言:重载就是对于不同的情况写不同的方法。 比如,同一个类中,写不同的构造函数用于初始化不同的参数。

    代码示例:

     1 public class Test1 {
     2     public void out(){
     3         System.out.println("参数"+null);
     4     }
     5     //参数数目不同
     6     public void out(Integer n){
     7         System.out.println("参数"+n.getClass().getName());
     8     }
     9  
    10     //参数类型不同
    11     public void out(String string){
    12         System.out.println("参数"+string.getClass().getName());
    13     }
    14  
    15     public void out(Integer n ,String string){
    16         System.out.println("参数"+n.getClass().getName()+","+string.getClass().getName());
    17     }
    18     //参数顺序不同
    19     public void out(String string,Integer n){
    20         System.out.println("参数"+string.getClass().getName()+","+n.getClass().getName());
    21     }
    22     
    23     public static void main(String[] args) {
    24         Test1 test1 = new Test1();
    25         test1.out();
    26         test1.out(1);
    27         test1.out("string");
    28         test1.out(1,"string");
    29         test1.out("string",1);
    30     }
    31 }

      

    重写(Overriding)

      重写发生在父类子类之间,比如所有类都是继承与Object类的,Object类中本身就有equals,hashcode,toString方法等.在任意子类中定义了重名和同样的参数列表就构成方法重写。

      重写(override):一般都是表示子类和父类之间的关系,其主要的特征是:方法名相同,参数相同,但是具体的实现不同

      重写的特征:

      (1):方法名必须相同,返回值类型必须相同

      (2):参数列表必须相同

      (3):访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected

      (4):子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法

      (5):构造方法不能被重写

      简单而言:就是具体的实现类对于父类的该方法实现不满意,需要自己在写一个满足于自己要求的方法。

    代码示例:

     1 class Test{
     2     public void out(){
     3         System.out.println("我是父类方法");
     4     }
     5 }
     6  
     7 public class Test1 extends Test{
     8     @Override
     9     //方法签名完全一致
    10     public void out() {
    11         System.out.println("我是重写后的子类方法");
    12     }
    13  
    14     public static void main(String[] args) {
    15         Test test = new Test();
    16         test.out();
    17         test = new  Test1();
    18         test.out();
    19     }
    20 }

      

    参考:https://blog.csdn.net/qq_42014192/article/details/89707483

  • 相关阅读:
    奇虎董事长周鸿祎:谁说没钱不能创业
    分析.NET基础库源码,学习Stream类及相关类
    Why need two IF in singleton pattern in the multiple threads scenario
    It's bad design that leveraging singleton design pattern in db connection
    Asp.net mvc 3 JSONResult return array
    System.Web.HttpContext.Current vs. ControllerContext.HttpContext (almost the same)
    Nhibernate HQL example paging and avoid sql injection
    Asp.net mvc 3 JSON complext object mapping
    Nhibernate configuration in app.config with log4net enabled 0 of 4
    Setup and run a simple nhibernate example
  • 原文地址:https://www.cnblogs.com/116970u/p/11440630.html
Copyright © 2011-2022 走看看