[JAVA靈魂10問]訪問權限的拷問:你懂的怎麼使用clone嗎
這期來講講java中的重寫:
首先貼一段簡單的代碼:看一下運行的結果
package cn.bryce.java;
public class Java05_overwrite {
public static void main(String[] args) {
User2 user = new User2();
System.out.println("user = " + user.sum());
Person user2 = new User2();
System.out.println("user2 = " + user2.sum());
}
}
class Person{
public int i = 10;
public int sum(){
return i + 10;
}
}
class User2 extends Person{
public int i = 20;
public int sum(){
return i + 20;
}
}
選中看答案
問題一:user = 40
問題二:user2 = 40
如果兩題都對了,那就再看看下面的
package cn.bryce.java;
public class Java05_overwrite {
public static void main(String[] args) {
Person user3 = new User2();
System.out.println("user3 = " + user3.sum());
}
}
class Person{
public int i = 10;
public int sum(){
return i + 10;
}
}
class User2 extends Person{
public int i = 20;
// public int sum(){
// return i + 20;
// }
}
問題三:user3 = 20
方法的重寫:
1.存在父子類關係,(子類重寫父類的方法)
2.如果子類和父類都有相同的方法,那麼遵循動態綁定機制
動態綁定機制:再程序的執行過程中,如果調用了對象的成員方法,那麼會將對象的方法和對象實際的內存綁定。與屬性無關 也就是說。
Java05_overwrite再調用sum方法時,會先去尋找User中的sum方法,沒有再去尋找Person中的方法。但是對於其中的屬性,就不遵循動態綁定機制。也就是那個方法調用,就用那個類中的屬性。
By the way
package cn.bryce.java;
public class Java05_overwrite {
public static void main(String[] args) {
Person user4 = new User2();
System.out.println("user4 = " + user4.sum());
}
}
class Person{
public int i = 10;
public int sum(){
return getI() + i;
}
public int getI (){ return i; }
}
class User2 extends Person{
public int i = 20;
public int getI (){ return i; }
}
問題四:user4 = 30