[JAVA靈魂10問]你知道java的重寫嗎?

[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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章