更新時間:2023-02-09 16:32:44 來源:動力節點 瀏覽2139次
一.方法覆蓋
① 方法覆蓋發生在具有繼承關系的父子類之間,這是首要條件;
② 覆蓋之后的方法與原方法具有相同的返回值類型、相同的方法名、相同的形式參數列表
③覆蓋之后的方法不能比原方法擁有更低的訪問權限,可以更高(學習了訪問控制權限修飾符之后你就明白了);
④ 覆蓋之后的方法不能比原方法拋出更多的異常,可以相同或更少(學習了異常之后就明白了);
⑤與了多態機制之后相同的返回值類型"可以修改一下嗎?
對于返回值類型是基本數據類型來說,必須一致
對于返回值類型是引用數據類型來說,重寫之后返回值類型可以變的更小但不能變大(但意義不大,開發無意義)
public class OverrideTest01 {
public static void main(String[] args) {
Bird2 b=new Bird2();
b.move2();
Cat2 c=new Cat2();
c.move2();
c.move2(1);//構成方法重載
}
}
class Animal2{
public void move2() {
System.out.println("fly");
}
}
class Bird2 extends Animal2 {
public void move2() {
System.out.println("I want fly");
}
}
/* private void move2(){
System.out.println("I want fly");
}
}*/
class Cat2 extends Animal2 {
public void move2(int i){
System.out.println("I want talk");
}
}
I want fly
I want talk
私有方法不可覆蓋,靜態方法覆蓋沒什么意義
public class OverrideTest06{
private void dosome(){
System.out.println("private dosome method dosome execute");
}
public static void main(String[] args){
OverrideTest06 at=new T();
at.dosome();
}
}
class mytest{
public static void main(String[] args){
OverrideTest06 ot = new T();
ot.dosome();
}
}
class T extends OverrideTest06{
public void dosome(){
System.out.println("T 's public dosome method execute");
}
}
//經過測試,私有方法不可覆蓋
注意事項
注意1:方法覆蓋只是針對于方法,和屬性無關。
注意2:私有方法無法愛蓋
注意3:構造方法不能被繼承,所以構造方法也不能被愛蓋
注意4:方法覆蓋只是針對于實例方法",靜態方法覆蓋”沒有意義。
二.方法重載
方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。調用重載方法時,Java編譯器能通過檢查調用的方法的參數類型和個數選擇一個恰當的方法。(百度百科)
簡單來說可以根據不同的需求使用不同的參數創建對象!
方法重載(overload)是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。
public class OverloadTest01 {
public static void main(String[] args) {
System.out.println(sum(10,20));
System.out.println(sum(20.0,30.0));
System.out.println(sum(20L,50L));
}
public static int sum(int a,int b) {
return a+b;
}
public static double sum(double a,double b){
return a+b;
}
public static long sum(Long a,Long b){
return a+b;
}
}
代碼滿足以下三個條件的時候構成方法重載
① 在同一個類當中。
② 方法名相同。
③ 參數列表不同:個數不同算不同,順序不同算不同,類型不同也算不同。
public class OverloadTest02 {
public static void main(String[] args) {
m1();
m1(10,20.0);
m2(20.0,10);
//m5();
//m6();
}
public static void m1(){
}
public static void m1(int a,double b){
System.out.println("int a,double b");
}
public static void m2(double a,int b){
System.out.println("double a,int b");
}
/*
public static int m5(){
return 1;
}
public static double m5(){
return 1.0;
}
public static void m6(){
}
static void m6(){
}*/
}
int a,double b
double a,int b
從m5,m6可知方法重載與返回值類型,修飾符列表無關
引申:我們從System.out.println()中可以體會到println其實也是一種方法重載
三.方法重載和方法覆蓋有什么區別?
方法重載發生在同一個類當中
方法覆蓋是發生在具有繼承關系的父子類之間。
方法重載是一個類中,方法名相同,參數列表不同
方法覆蓋是具有繼承關系的父子類,并且重寫之后的方法必須和之前的方法一致:方法名一致、參數列表一致、返回值類型一致
以上就是動力節點小編介紹的"大家想要了解的-方法的覆蓋和重載",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習