Object類、多態

1、Object 類

Object類是類層次結構的根類,每個類都使用Object類作爲父類,所有對象(包括數組)都實現這個類的方法。

Object類中定義了很多方法,每個類既然是Object類的子類,那麼每個類都繼承了Object類中的方法。


例如,1、Object類中定義了一個equals()方法:

boolean equals.(Object obj) { 指示其它對象與此對象是否“相等” };返回值爲布爾類型。


2、Object類中還有個 toString()方法:

String toString() { 返回該對象的字符串表示 };


3、Object類中還有個getClass() 方法:

Class getClass() { 返回Object的運行時類 };可理解爲“反編譯”過程,把對象轉換成Class類。


4、而 Class 類中有個方法:

String getName() { 以String 的形式返回此Class 對象所表示的實體(類、接口、數組類、基本類型或 void)名稱。 }

代碼示例:

class ObjectDemo {
	public static void main(String[] args){
		Demo d1 = new Demo();
		Demo d2 = new Demo();
		System.out.println(d1.equals(d2)); //判斷d1和d2是不是一個對象
		System.out.println(d1.toString()); //把d1這個對象以字符串形式輸出,“類名+@+對象哈希值”		
		Class c = d1.getClass();           //把d1這個對象轉成運行時類文件
		System.out.println(c.getName());   //輸出這個類文件的文件名
	}
}
class Demo {   //extends Object,默認繼承Object類
	
}
編譯運行結果:



2、多態

2.1 多態的定義

多態的思想可以理解爲,一個事物的多種體現形態,就是多態

2.2 多態的體現

現實中的舉例:動物這種事物,可以體現成多種形態,比如貓是一種動物,狗也是一種動物,而貓和狗就是動物的多種體現形態。
體現到代碼中舉例:父類引用指向子類對象,父類引用也可以接收自己的子類對象。
所謂父類引用指向子類對象,就是 new一個子類對象,但是命名的變量定義爲父類的類型。
多態通常伴隨着向上轉型對象類型的強制轉換。(參考繼承的那篇博客)
多態代碼示例:
class Animal {
    public void eat(){
        System.out.println("動物");
    }
    public void cc() {
        System.out.println("CC");
    }
}
class Cat extends Animal {
    public void eat() {
        System.out.println("吃魚");
    }
    public void catchmouse() {
        System.out.println("抓老鼠");
    }
}
class Dog extends Animal {
    public void eat() {
        System.out.println("吃骨頭");
    }
    public void kanjia() {
        System.out.println("看家");
    }
}
class DuoTaiDemo{
    public static void main(String[] args){
        Animal c = new Cat();       //父類引用指向子類對象,即多態
        c.eat();
        c.cc();
    }
}

編譯運行結果:


2.3 多態的前提

必須是類與類之間有關係,要麼繼承,要麼實現。
通常還有一個前提:存在方法覆蓋,也叫重寫。

2.4 多態的好處

多態的出現提高了程序的擴展性和後期可維護性。

2.5 多態的弊端

多態提高了程序的可擴展性,但是隻能使用父類的引用訪問父類中的成員
如果想要訪問子類的特有方法或者屬性,還要強制讓父類引用向下轉型。
所以多態的出現,一致都是子類在來回轉換角色,
向上轉型父類引用指向子類對象,或者向下轉型,訪問子類特有的內容

2.6 多態中成員的特點

(1)多態中成員函數的特點:
在編譯時期:參考引用型變量所屬的類中是否有調用的方法。如果有,編譯通過;如果沒有,編譯失敗。
在運行時期:參考對象所屬的類中是否有調用的方法。
簡單總結就是:成員函數在多態被調用時,編譯看左邊,運行看右邊。
(2)多態中成員變量的特點:
無論編譯和運行,都參考左邊(引用型變量所屬的類)
(3)多態中靜態成員函數的特點:
無論編譯和運行,都參考左邊。
發佈了39 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章