重写、覆盖、重载、多态区别

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类的方法是重载。对两者比较,可以发现多态对重载的优点:
如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;
如果用多态,则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,在子类里各自实现(重写)。

时间: 2024-10-20 02:56:40

重写、覆盖、重载、多态区别的相关文章

重写和重载的区别

(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同.无法以返回型别作为重载函数的区分标准. 下

java 重写和重载的区别

重写:重写是子类的方法覆盖父类的方法,有两个重要特点 1.子类方法名和参数类型.个数必须和父类一样. 2.如果有返回值,则返回值类型也必须和父类一样. 1 //父类 2 public class Bird(){ 3 public String getInfo(){ 4 return "父类中的getInfo方法": 5 } 6 } 7 8 //子类重写父类的getInfo方法 9 10 public class Littlebird extends Bird{ 11 @Override

覆盖、重写与重载的区别

覆盖又叫重写,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用.对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法.除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法.在覆盖要注意以下的几点: 1.重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载. 2.重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>

java实现多态 方法的重写和重载的区别

1.方法的重写 思路:先写一个父类People,在类中定义一个 print方法 ,然后写一个子类 Student 继承父类,重写print方法. //父类 class People{ public void print(){ System.out.println("这是父类的print方法!"); } } //子类 继承父类 class Student extends People{ public void print(){ System.out.println("这是子类的

关于还有一些公司问重写与重载的区别个人见解

首先我认为这回暴露公司或者问你此问题人的水准 先说方法重写和方法重载在英文中的区别分别是override和overload: 两者比较没有太大的意思,我们分别分析一下两者的定义 方法重写:子类包含于父类同名方法的现象称为方法重写(也被称为方法覆盖),需要遵循"两同两小一大"的规则 1.两同:方法名相同,参数列表两同. 2.两小:子类方法返回值类型应比父类方法的返回值类型更小或相等 子类方法声明抛出的异常类应该比父类方法声明抛出的异常类更小或等于 3.一大:子类方法的访问权限应该比父类方

面向对象概念中方法重写与重载的区别?

重载:重载一定是在同一个类当中,有一组方法名字相同,功能是类似的,但参数不同. 重写:在父子类当中,子类拥有与父类同名.同参.同返回类型的方法,可以改变父类的行为.父类加关键字virtual虚方法(为了在子类当中去重写父类的方法),子类中要加关键字override,体现了面向对象中的多态性(都不叫就不是方法的重写,而是方法的覆盖).

方法的重写与重载的区别(Override与Overload)。重载的方法是否可以改变返回值的类型

方法的重写(Override)与重载(Overload)的区别.重载的方法是否可以改变返回值的类型?[基础] 解释: 方法的重写overriding和重载Overloading是Java多态性的不同表现. 1.重写overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现. 2.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding). 子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"

java中重写、重载的区别

1.重写[针对父类与子类而言] 子类与父类间存在多态性,对父类的函数进行重新定义.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding). 在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法.但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写.方法重写又称方法覆盖. 其执行的先后顺序如下: 1 package com.extend.test; 2 3 //父类 4 public class Father {

Java重写和重载的区别

区别点 重载方法 重写方法 参数列表 必须修改 一定不能修改 返回类型 可以修改 一定不能修改 异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常 访问 可以修改 一定不能做更严格的限制(可以降低限制) 重载(Overload) 重载(overloading) 是在一个类里面,方法名字相同,而参数不同.返回类型呢?可以相同也可以不同. 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表. 只能重载构造函数 重载规则 被重载的方法必须改变参数列表: 被重载的方法可以改变返

重写与重载的区别

重写: 1.参数列表必须与被重写的方法相同. 2.返回的类型必须与被重写的方法的返回类型相同. 3.访问修饰符的限制一定要大于被重写的方法的访问修饰符. 4.重写方法一定不能抛出新的检查异常或比被重写的方法申明更加宽泛的检查型异常. 重载: 1.必须具有不同的参数列表. 2.可以有不同的返回类型,只要参数列表不同即可. 3.可有不同的访问修饰符. 4.可以抛出不同的异常.