雖然這些概念在翻譯成中文的過程中,有很多不同的翻譯方式
但本質上隻有兩種說法,就是Override和Overload
其中,Overload一般都被翻譯成重載
而Override的翻譯就亂七八糟了,所謂覆寫、覆寫、重寫、改寫指的其實都是這個意思
那麼為什麼會有這麼多名詞,而不能統一一下呢?
打一個最簡單的比喻吧,為什麼老婆這個詞有這麼多叫法?而不能統一一下呢?
這個原因就不用我說了吧呵呵
是以,不管這個單詞被翻譯成多少種說法
在你學習的過程中,你隻需要按照一種你喜歡的說法來使用就可以了
而對于其他的說法,你隻需要在看到别人使用的時候
能夠知道這跟你使用的某個說法的含義是一樣的,就可以了
是以,在這裡這個問題可以簡化為
Overload和Override定義和差別是什麼?
為了友善講解,在這裡我将使用“重載”和“覆寫”這兩個名詞
其中重載就是Overload,覆寫就是Override,你心裡明白就可以了~
下面給出最基本的重載和覆寫的定義吧:
在同一個類中,如果定義了多個方法名相同,但是可以通過參數進行區分的方法,那麼這些方法就可以稱之為重載
在子類中,如果定義了方法名、參數和傳回值都與父類完全相同的方法,那麼子類中的這個方法就可以稱之為覆寫了父類中的方法
是以,你隻需要嚴格記住以上兩個定義,就很容易區分重載和覆寫了
下面就結合上面的定義,再來看看你給出的代碼吧:
[code=java]
class SuperClass {
public void method(int x, double y) {
System.out.println("我是父類SuperClass");
}
public void method(int x) {
System.out.println("我肯定是重載了");
}
}[/code]
在這裡可以看出,由于method(int x)和method(int x, double y)的方法名相同,但是參數可以區分
是以這兩個method就是重載關系
再來看下面這段代碼:
[code=java]
class SubClass1 extends SuperClass {
public void method(int x, double y) {
System.out.println("我重定義了父類SuperClass,即覆寫了父類方法");
}
}[/code]
在這裡可以看出,由于SubClass1繼承了SuperClass
并且SubClass1中定義的void method(int x, double y)這個方法
和SuperClass中定義的void method(int x, double y)方法的方法名、參數和傳回值完全相同
是以子類中的這個method就是覆寫了父類中的這個method
好,如果對上面的兩段代碼的解釋你能夠看懂的話
那我也來給出一段代碼吧,看你能不能看的懂~
[code=java]
class SubClass3 extends SuperClass {
public void method(int x, double y) {
System.out.println("我是子類Subclass3");
}
public void method(int x) {
System.out.println("我是重載還是覆寫呢?");
}
}[/code]