抽象類
-
有些類不該被初始化(例如Animal,因為現實中沒有Animal對象存在),為了防止Animal類被初始化,可以將其標記為抽象類——在類的聲明前面加上抽象類關鍵詞abstract
- 具體類——非抽象的類就是具體類
- 抽象的方法——除了類之外,也可以將方法標記成抽象的,抽象方法必須被覆蓋過才能調用,抽象方法沒有方法體——publicabstractvoideat();//沒有{}
如果要聲明出一個抽象的方法,就必須將類也標記為抽象的,不能在非抽象類中擁有抽象方法
必須實現所有抽象的方法——這表示在繼承樹下的第一個具體類必須要實現出所有的抽象方法 -
Object類是所有類的父類
每個對象都擁有的方法(可覆蓋)
A.equals(Objecto)——判斷兩個對象是否相等
B.getClass()——告訴你該對象是什么類(從哪里被初始化的)
C.hashCode()——列出該對象的哈希代碼(對象唯一的ID)
D.toString()——列出類的名稱和一串我們不關心的數字
任何從ArrayList<Object>取出的東西都會被當作Object類型的引用而不管它原來是什么
當一個變量被聲明為Object類型的對象所引用時,它無法再賦值給原來類型的變量
編譯器是根據引用類型(而不是對象類型)來判斷有哪些method可以調用
o作為Object的引用,只能調用Object的方法,而不能調用bark()方法
越處于繼承樹的下端,遙控器的按鈕(引用)越多,Object引用的對象按鈕最少
如果想要調用Dog類的方法,可以從Object中拷貝出一個Dog引用,并賦值給Dog引用變量
接口
使用接口的目的:接口可以實現多重繼承又不會出現致命方塊的問題
實現方法:把全部的方法設置為抽象的(接口就像是100%純天然抽象類)
接口的定義:publicinterfacePet{...};
接口的實現:publicclassDogextendsCanineimplementsPet{...};
不同繼承樹的類也可以實現相同的接口
類可以實現多個接口
接口的方法都是publicabstract的(默認的)
要從子類調用父類的方法可以用super關鍵字