美文网首页
重写、覆盖、重载、多态几个概念的区别分析

重写、覆盖、重载、多态几个概念的区别分析

作者: 骇客与画家 | 来源:发表于2017-12-24 12:16 被阅读0次

原作者: Erik明
原博客链接:重写、覆盖、重载、多态几个概念的区别分析

override->重写(=覆盖)、overload->重载、polymorphism -> 多态

override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。

重写(覆盖)的规则:

  1. 重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
  2. 重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
  3. 重写的方法的返回值必须和被重写的方法的返回值一致;
  4. 重写的方法所抛出的异常必须和被重写方法所抛出的异常一致,或者是其子类;
  5. 被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
  6. 静态方法不能被重写为非静态的方法(会编译出错)。

overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。

重载的规则:

  1. 在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数形式可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
  2. 不能通过访问权限、返回类型、抛出异常进行重载;
  3. 方法的异常类型和数目不会对重载造成影响;

多态的概念比较复杂,有多种意义的多态,一个有趣但不严谨的说法是:继承是子类使用父类的方法,多态则是父类使用子类的方法。

一般,我们使用多态是为了避免父类里大量重载引起代码臃肿且难于维护。

public class Shape {
   public static void main(String[] args){
     Triangle tri = new Triangle();
     System.out.println("Triangle is a type of shape? " + tri.isShape());// 继承
     Shape shape = new Triangle();
     System.out.println("My shape has " + shape.getSides() + " sides."); // 多态
     Rectangle Rec = new Rectangle();
     Shape shape2 = Rec;
     System.out.println("My shape has " + shape2.getSides(Rec) + " sides."); //重载
   }
   public boolean isShape(){
     return true;
   }
   public int getSides(){
     return 0 ;
   }
   public int getSides(Triangle tri){ //重载
     return 3 ;
   }
   public int getSides(Rectangle rec){ //重载
    return 4 ;
   }
}

class Triangle extends Shape 
{
   public int getSides() { //重写,实现多态
     return 3;
   }
}

class Rectangle extends Shape 
{
   public int getSides(int i) { //重载
    return i;
   }
}

注意Triangle类的方法是重写,而Rectangle类的方法是重载。对两者比较,可以发现多态对重载的优点:

如果用重载,则在父类里对应每一个子类都重载一个取得边数的方法;

如果用多态,则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,在子类里各自实现(重写)。

相关文章

  • 重写、覆盖、重载、多态几个概念的区别分析

    原作者: Erik明原博客链接:重写、覆盖、重载、多态几个概念的区别分析 override->重写(=覆盖)、ov...

  • 方法重载与方法重写(@Overload @Override)

    java方法重载和方法重写(方法覆盖)的区别: 方法重载: Overload 方法重写: Override 批判,...

  • Java中重载和覆盖(重写)的区别

    Java中重载和覆盖(重写)的区别 1,基本概念 重载(Overload) Java中的方法重载发生在同一个类里面...

  • Unity 面试题汇总(一)

    C#语言基础 1.重载和重写的区别 1) 封装、继承、多态所处位置不同,重载在同类中,重写在父子类中。 ...

  • 面向对象的基本原则

    基本要素: 封装 , 继承 , 多态 多态 : 注意重写和重载 重写: 子类重写父类的方法 重载: 同样的方法名 ...

  • Java重载与重写

    简言 重写和重载都是面向对象多态的一种表现,重载是编译时多态,重载是运行时多态. 重载 重载(Overloadin...

  • 知识点

    重载(同一个类相同方法叫重载) 和 覆盖(父类子类相同方法叫覆盖) 叫多态 方法的重写规则 参数列表必须完全...

  • 继承,重写,覆盖,重载,多态区分

    重写(override) = 覆盖一般是子类继承父类后,重写其中的方法。重写有几个需要注意的规则:1、重写方法的参...

  • 重写与重载的区别

    方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一...

  • 2.6 重写(Override)与重载(Overload)

    基本概念 重载和重写是面向对象多态特性的两个表现,具有不同的含义。下面来详细介绍。 重写(Override) 重写...

网友评论

      本文标题:重写、覆盖、重载、多态几个概念的区别分析

      本文链接:https://www.haomeiwen.com/subject/utocgxtx.html