先給一個(gè)答案验残,不能捞附,父類的靜態(tài)方法能夠被子類繼承,但是不能夠被子類重寫您没,即使子類中的靜態(tài)方法與父類中的靜態(tài)方法完全一樣鸟召,也是兩個(gè)完全不同的方法。
class Fruit{
static String color = "五顏六色";
static public void call() {
System.out.println("這是一個(gè)水果");
}
}
public class Banana extends Fruit{
static String color = "黃色";
static public void call() {
System.out.println("這是一個(gè)香蕉");
}
public static void main(String[] args) {
Fruit fruit = new Banana();
System.out.println(fruit.color); //五顏六色
fruit.call(); //這是一個(gè)水果
}
}
如代碼所示氨鹏,如果能夠被重寫欧募,則輸出的應(yīng)該是這是一個(gè)香蕉。與此類似的是仆抵,靜態(tài)變量也不能夠被重寫跟继。如果想要調(diào)用父類的靜態(tài)方法,應(yīng)該使用類來調(diào)用镣丑。
那為什么會出現(xiàn)這種情況呢舔糖?
我們要從重寫的定義來說:
重寫指的是根據(jù)運(yùn)行時(shí)對象的類型來決定調(diào)用哪個(gè)方法,而不是根據(jù)編譯時(shí)的類型莺匠。
對于靜態(tài)方法和靜態(tài)變量來說金吗,雖然在上述代碼中使用對象來進(jìn)行調(diào)用,但是底層上還是使用父類來調(diào)用的,靜態(tài)變量和靜態(tài)方法在編譯的時(shí)候就將其與類綁定在一起摇庙。既然它們在編譯的時(shí)候就決定了調(diào)用的方法旱物、變量,那就和重寫沒有關(guān)系了跟匆。
靜態(tài)屬性和靜態(tài)方法是否可以被繼承
可以被繼承异袄,如果子類中有相同的靜態(tài)方法和靜態(tài)變量,那么父類的方法以及變量就會被覆蓋玛臂。要想調(diào)用就就必須使用父類來調(diào)用烤蜕。
class Fruit{
static String color = "五顏六色";
static String xingzhuang = "奇形怪狀";
static public void call() {
System.out.println("這是一個(gè)水果");
}
static public void test() {
System.out.println("這是沒有被子類覆蓋的方法");
}
}
public class Banana extends Fruit{
static String color = "黃色";
static public void call() {
System.out.println("這是一個(gè)香蕉");
}
public static void main(String[] args) {
Banana banana = new Banana();
banana.test(); //這是沒有被子類覆蓋的方法
banana.call(); //調(diào)用Banana類中的call方法 這是一個(gè)香蕉
Fruit.call(); //調(diào)用Fruit類中的方法 這是一個(gè)水果
System.out.println(banana.xingzhuang + " " + banana.color); //奇形怪狀 黃色
}
}
從上述代碼可以看出,子類中覆蓋了父類的靜態(tài)方法的話迹冤,調(diào)用的是子類的方法讽营,這個(gè)時(shí)候要是還想調(diào)用父類的靜態(tài)方法,應(yīng)該是用父類直接調(diào)用泡徙。如果子類沒有覆蓋橱鹏,則調(diào)用的是父類的方法。靜態(tài)變量與此相似堪藐。