方法重载和方法重写

方法重载:

   方法重载是一个类中可以定义有相同名字,但参数不同的多个方法。各方法之间的参数个数、类型、排列顺序不同即可构成重载。仅有返回值类型不同不能构成重载。方法重载是编译时多态性的表现,Java编译程序会根据方法调用的实在参数来决定使用哪个方法。

方法重写:

   在使用方法重写时,需要注意一下几点:

(1)子类重写的方法必须与父类被重写的方法具有相同的方法名、参数列表和相同(或相容)的返回值类型,否则不构成重写。例如,父类定义了方法int f(int i){...},若子类方法重写时写成byte f(int i){...},由于返回值类型时Java基本数据类型,所以必须相同,因而编译程序会报错。但是,若父类定义了方法Object get(){...},子类方法重写时写成Point get(){...},虽然返回值不同,但由于Point是Object的子类,因而是允许的。即对于返回值类型是引用的,要求相容。

(2)子类重写的方法不能比父类中被重写的方法拥有更严格的访问权限。

(3)父类的静态方法不能被子类重写为非静态的方法。同样,父类中的实例方法也不能被子类重写为静态方法。

(4)方法重写只针对实例方法,对于父类中的静态方法,子类只能隐藏、重载或继承。

(5)父类中能被子类继承的实例方法才会在子类中被重写。

(6)子类重写的方法不能比父类中被重写的方法声明抛出更多的异常。

它们之间的相同点:

  • 都要求方法同名;
  • 都可以用于抽象方法和非抽象方法

不同点:

  • 重写要求参数签名必须一致,而方法重载要求签名必须不一致
  • 方法重写要求返回值类型必须一致,而重载对此不作限制
  • 方法重写只能用于子类从父类继承的实例方法,方法重载用于同一个类的所有方法(包括重父类中继承而来的方法)
  • 方法重写对方法的访问权限和抛出的异常有特殊要求,而方法重载在这方面没任何限制
  • 父类中的一个方法只能被子类重写一次,而一个方法所在的类中可以被重载多次
  • 构造方法能被重载但不能被重写。
posted @ 2020-08-08 14:42  Ehre  阅读(348)  评论(0编辑  收藏  举报