一、重寫(Override)
1、概念
重寫就是子類對父類的允許訪問的方法的實(shí)現(xiàn)過程進(jìn)行重新編寫,返回值和形參是不能改變的。
重寫的優(yōu)點(diǎn)在于子類可以根據(jù)自身需要定義特定于自身的行為,重寫方法是不能拋出新的檢查異常或者比父類更寬泛的異常類型。
public class Animal{
public void getName(){
System.out.println("動(dòng)物的名稱");
}
}
public Cat extends Animal{
public void getName(){
System.out.println("貓");
}
}
public class TestCat{
public static void main(String[] args){
Animal a = new Animal();
Animal b = new Cat();
a.getName();
b.getName();
}
}
// 運(yùn)行結(jié)果
動(dòng)物的名稱
貓
2、方法重寫的規(guī)則
(1)、參數(shù)列表與被重寫方法的參數(shù)列表必須完全相同;
(2)、返回類型與被重寫方法的返回類型可以不相同,但是必須是父類返回值的派生類;
(3)、訪問權(quán)限不能比父類中被重寫的方法的訪問權(quán)限更低;
(4)、父類的成員方法只能被它的子類重寫;
(5)、生命為 final 的方法不能被重寫;
(6)、子類和父類在同一個(gè)包中,那么子類可以重寫父類除了聲明為 private 和 final 的之外的所有方法;
(7)、子類和父類不在同一個(gè)包中,那么子類只能夠重寫父類聲明為 public 和 protected 的非 final 方法;
(8)、重寫的方法能夠拋出任何非強(qiáng)制異常,無論被重寫的方法是否拋出異常。但是重寫的方法不能拋出新的強(qiáng)制性異常,或者比被重寫方法的更廣泛的強(qiáng)制性異常;
(9)、構(gòu)造方法不能被重寫;
(10)、如果不能繼承一個(gè)累,則不能重寫該類。
二、重載(Overload)
1、概念
重載(overloading)是在一個(gè)類里面,方法和名字相同,而參數(shù)不同,返回類型可以相同也可以不同。
每個(gè)重載的方法都必須有一個(gè)獨(dú)一無二的參數(shù)類型列表。
2、重載規(guī)則
(1)、被重載的方法必須改變參數(shù)列表(參數(shù)的個(gè)數(shù)或者類型不同);
(2)、被重載的方法可以改變返回類型;
(3)、被重載的方法可以改變訪問修飾符;
(4)、被重載的方法可以聲明新的或者更廣的檢查異常;
(5)、方法可以在同一個(gè)類中或者一個(gè)子類中被重載;
(6)、無法已返回執(zhí)類型作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)。