java中在多態的實現是通過類的繼承或者接口的實現來完成的。
在類繼承或者接口實現過程中就會涉及到成員屬性以及成員函數的重寫,需要注意的是,成員函數的重寫是直接覆蓋父類的(繼承中),但是成員變量重寫是不會進行覆蓋的。
舉個類子:
兩個類Person以及Man;
都有相同名稱的屬性age以及相同名稱的方法say();
public class Person {
public int age;
public void say() {
System.out.println("person say...");
}
}
public class Man {
public int age;
public void say() {
System.out.println("man say...");
}
}
//測試
public class Proc {
public static void main(String[] args) {
Man man = new Man();
System.out.println("----------屬性----------");
man.age = 20;
System.out.println(man.age); //20
Person person = man;
person.age = 25;
System.out.println(person.age); //25
System.out.println("----------函數----------");
Man m = new Man();
man.say(); //man say...
Person p = m;
p.say(); //man say...
}
}
通過上面的列子可以看出來,成員函數可以重寫,在通過父類調用子類方法的時候調用的是重寫的方法,而成員屬性不可以覆蓋(即使重寫了,沒有重寫不談);
對於這個的區分可以這樣理解:
從存儲角度看,屬性是存儲進堆中的,而方法只是在棧中暫存,不做長時間保存,執行過就釋放, 因此屬性不變(簡單理解,詳細的講起來太亂);
以上內容均依據個人理解手打完成,如有雷同純屬偶然,不喜勿噴,有錯誤請指正 ----2016/7/17