shadow(遮蔽):
在繼承過程中,在sub class宣告和super class相同field的話就不會繼承super class的field而是使用自己的field,此種情形稱為shadow。
class Cube{
String name;
double length;
double width = 5;
double height;
double volume(){return length * width * height;}
}
class Building extends Cube{
double width = 10;
String material;
}
result:
當讀取Building.width時,會讀到10 而不是 5。
overloading(多載):
同一個class內,若有2個method符合下列2個規則即可稱為overloading。
1. method名稱一樣,否則只是2個不同的method,不能稱為overloading。
2. 傳入的argument個數或資料類型不一樣,JVM會依據個數或資料類型來決定呼叫哪個method。
double volume() {
return length * width * height;
}
double volume(Cube cube) //多載(overload)
{
return volume() + cube.volume();
}
overriding(改寫)[重要]:
overriding只發生在繼承。若有2個method符合下列4個規則即可稱為overriding。
1. method名稱一樣,否則只是2個不同的method。
class Cube{
public void show() {}
}
class Building extends Cube{
public void showA() {}
}//編譯成功,但不是Overriding
2. 傳入的argument個數或資料類型一樣,否則只能稱做overloading。
class Cube{
public void show() {}
}
class Building extends Cube{
public void show(int i) {}
}//編譯成功,但不是Overriding,只能叫做Overload
3. return value的資料類型要一樣。
class Cube{
public void show() {}
}
class Building extends Cube{
public double show() {return;}
}//編譯失敗
4. sub class的access modifier(開放修飾詞)要大於或等於super class (大小依序為:public>protected>default>private)。
class Cube{
public void show() {}
}
class Building extends Cube{
protected void show() {}
}//編譯失敗
final修飾的method不能被改寫。static修飾的method只能被static method改寫,non-static method只能被non-static method改寫。
class Cube{
final public void show() {}
}
class Building extends Cube{
public void show() {}
}//編譯失敗
class Cube{
public void show() {}
}class Building extends Cube{
final public void show() {}
}//編譯成功,沒有錯誤
class Cube{
static public void show() {}
}
class Building extends Cube{
public void show() {}
}//編譯失敗
class Cube{
public void show() {}
}
class Building extends Cube{
static public void show() {}
}//編譯失敗
class Cube{
static public void show() {}
}
class Building extends Cube{
static public void show() {}
}//編譯成功
Overriding:
class Cube{
String name;
double length, width, height;
public void show() {
System.out.println("立方體名稱: " + name);
System.out.println("長 = " + length);
System.out.println("寬 = " + width);
System.out.println("高 = " + height);
}
}
class Building extends Cube{
String material;
public void show() {
System.out.println("建築物名稱: " + name);
System.out.println("長 = " + length);
System.out.println("寬 = " + width);
System.out.println("高 = " + height);
System.out.println("材質 = " + material);
}
}
2007/08/07
訂閱:
張貼留言 (Atom)
0 comments:
張貼留言