Extends
Extends
Extends是通過extend 類Y來添加功能,或者添加變數,或者添加方法,或者覆蓋類Y的一種方法。
一個介面extends另外一個介面來添加方法。
範例
在 B 類別 (定義如下) 中,會自動插入一個以 A 類別之建構函式作為對象的呼叫,作為 B 建構函式的第一行陳述式,這是因為該處並未存在任何呼叫的緣故。 (也就是說,這個呼叫在範例中被註解化。)
class B extends class A
{
function B() { // 此為建構函式
// super(); // 選擇性;如果忽略,則在編譯時插入
}
function m():Number {return 25;}
function o(s:String):Void {trace(s);}
}
另一個簡單的例子:
假如這樣定義:
class A{
int i;
void f(){}
}
//在這個B類裡面 可以訪問到A類裡面的 int i; 這個變數
class B extends A{
int j;
void f(){}//重寫
void g(){}
}
然後:
B b = new B();
b就是子類對象的實例,不僅能夠訪問自己的屬性和方法,也能夠訪問父類的屬性和方法。諸如b.i,b.j,b.f(),b.g()都是合法的。此時b.f()是訪問的B中的f()
A a = new B();
a雖然是用的B的構造函數,但經過upcast,成為父類對象的實例,不能訪問子類的屬性和方法。a.i,a.f()是合法的,而a.j,a.g()非法。此時訪問a.i,a.f()是訪問B中變數與方法。
implements,實現父類,子類不可以覆蓋父類的方法或者變數。即使子類定義與父類相同的變數或者函數,也會被父類取代掉。 extends,可以實現父類,也可以調用父類初始化 this.parent()。而且會覆蓋父類定義的變數或者函數。這樣的好處是:架構師定義好介面,讓工程師實現就可以了。整個項目開發效率大大提升,開發成本大大降低。
這兩種實現的具體使用,是要看項目的實際情況,需要實現,不可以修改用implements,只定義介面需要具體實現,或者可以被修改擴展性好,用extends。