編程基礎-面向對象-基於模板的面向對象解析

上接:http://blog.csdn.net/larrylgq/article/details/7432832

本文由larrylgq編寫,轉載請註明出處:http://blog.csdn.net/larrylgq/article/details/7563994

作者:呂桂強

郵箱:[email protected]


現在大多數面向對象的語言都是採用模板的方式實現,以Ruby爲例:

class MyClass

 def y_method

  @v = 1

end

obj = MyClass.new

obj.class

=>MyClass

實例變量實例變量存在與對象之中

靜態語言和動態語言不同

在java等靜態語言中對象的實例變量是確定的eg:

/**
 * @author 呂桂強
 * @email [email protected]
 * @version 創建時間:2012-5-14 上午10:42:47
 */
public class MyClass {
	public int i;
	public static void main(String[] args) {
		MyClass obj = new MyClass();
		System.out.println(obj.getClass());
		Field[] fileds = obj.getClass().getFields();
		for (Field f : fileds) {
			System.out.println(f);
		}
		// => class MyClass
		// => public int MyClass.i
	}
}

即使上面的例子中我們沒有使用到變量i,但是在對象中也存在這個實例變量,且對象obj中實例變量不可隨意增刪


在ruby等動態語言中:eg:

puts obj.instance_variables

=>[]

obj.my_method

puts obj.instance_variables

=>[:@v]

當我們沒有調用my_method方法時obj對象沒有任何實例變量,在運行時調用my_method方法後obj對象多了v這個實例變量


方法無論是靜態語言還是動態語言,在創建的obj對象中都沒有真正保存該對象可執行的方法,這些方法是保存在MyClass類中,而obj對象中只保存實例變量和到自身類的引用(tips:我們可以把類看成一個特殊的實現Class的對象)

這些方法被成爲“對象的方法”而不是“類的方法”,即我們只能用obj(MyClass的實例)來訪問它們

如果要訪問類的方法,需要特殊處理(eg:java中需要定義static方法)

所有的類都是Class類的一個對象(包括Object),而Class類又繼承自Object優點繞吧呵呵



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