1、多型概念
定義:某一類事物的多種表現形式。可以理解為事物存在的多種體現形態。
2、多型-
擴充套件性
多型的體現:父類的引用指向了自己的子類物件。父類的引用也可以接受自己的子類物件。如:father father=new sun();
多型的好處:多型的出現大大的提高了程式的擴充套件性。
多型的前提:必須是類與類之間的關係,要麼繼承,要麼實現。通常還有乙個前提,存在覆蓋。
多型的弊端:提高了擴充套件性,但只能使用父類的引用訪問父類中的成員。
inte***ce animal
public class dog implements animal }
public class pink implements animal }
public class duotaidemo
/**
* 用父類來接受子類,那麼就可以呼叫子類和父類相同的方法*/
public static void animaleat(animal animal) }
結果:狗吃骨頭
豬吃豬飼料
3、多型-
轉型
如果想要操作子類特有的方法,怎麼辦?
強制將父類的引用轉成子類型別。如:father father=new son();son son=(
son)
father;
但不能這麼做:(將父類物件轉成子類型別)
father father=new father();
son son=(
son)
father;
我們能轉換的是父類引用指向了自己的子類物件時,該引用可以被提公升,也可以被強制轉換。多型自始自終都是子類物件在做著變化。
判斷乙個例項是不是某個型別時:a instanceof son;a
是例項名,
son是類名
4、多型-
示例
inte***ce animal
public class dog implements animal
/* 自獨有的方法
*/public void seedoor()
} public class pink implements animal
/* 自獨有的方法
*/public void dongdi()
} public class duotaidemo
/**
* 用父類來接受子類,那麼就可以呼叫子類和父類相同的方法*/
public static void animaleat(animal animal) else if(animal instanceof pink) }
}結果;
狗吃骨頭 看門
豬吃豬飼料
豬,gongdi
5、多型中成員的特點
在多型中成員函式(非靜態)的特點:
在編譯時期:參閱引用型變數所屬的類是否有呼叫的方法,如果有,編譯通過,如果沒有,編譯失敗。
在執行時期,參閱物件所屬的類是否有呼叫方法。
簡單總結:成員函式在多型呼叫時編譯看左邊,執行看右邊。
public class fu
public void print() }
public class zi extends fu
public void print()
public static void main(string agrs) }
結果:父類的靜態的show()
方法子類的非靜態的print()
方法涉及面試的環節:
在多型中成員變數和靜態函式的特點:無論編譯和執行,都參考左邊(引用變數所屬的類)
6、多型的主機板示例
需求:電腦執行例項,電腦執行基於主機板。
inte***ce pci
class mainboard
public void usepci(pci p)//pci p = new netcard()//介面型引用指向自己的子類物件。 }
} class netcard implements pci
public void close()
} class soundcard implements pci
public void close()
} class duotaidemo5
} 7、多型的擴充套件示例
需求:資料庫操作,資料是使用者資訊
(1)連線資料庫,
(2)運算元據庫,增刪改查
(3)關閉資料庫連線。
inte***ce userinfodao
class userinfobyjdbc implements userinofdao
public void delete(user user)
} class userinfobyhibernate implements userinfodao
public void delete(user user)
} class dboperate
} 8、object類
object是所有物件的直接或者間接父類,傳說中的上帝。該類定義的肯定是所有類都具備的功能。
object已經提供了對物件是否相同的比較方法,如果自定義類中也有比較相同的功能,沒有必要重新定義,只要沿襲父類中的功能,建立自己特有的比較內容即可,這就是覆蓋。
9、內部類訪問規則
定義:將乙個類定義在另乙個類的裡面,對裡面那個類就稱為內部類(內建類)。
內部類特點:
內部類可以直接訪問外部類中的成員,也包括私有。
外部類要訪問內部類必須建立內部類物件。
在另乙個類中訪問內部類方式:外部類.
內部類 名稱
=new
外部類(). new
內部類();
private可以修飾內部類的
class
前面。如果內部類和外部類有相同的變數名,則在外部類訪問內部類變數時方式:外部類.this.
變數名;
10、靜態內部類
總結訪問格式:
1當內部類定義在外部類的成員位置上,而且非私有,可以再外部其它類中,可以直接建立內部類物件。
格式:外部類名.
內部類名 變數名
=外部類物件
.內部類物件
;如:outer.inner in=new outer().new inner();
2當內部類在成員位置上,就可以被成員修飾符所修飾,比如:
private
,將內部類在外部類中進行封裝。還有
static
,內部類就具備
static
的特性。
當內部類被static
修飾後,只能直接訪問內部類中的
static
成員,出現了訪問許可權。
在外部其它類中,如何直接訪問靜態內部類呢?
方式:new
外部類名
.內部類
().函式名(引數
);如:
new outer.inner().function();
如果內部類的成員函式也是靜態的,訪問方式是:outer.inner.function();
注意:當內部類中定義了靜態成員,該內部類必須是靜態的。
當外部類中的靜態方法訪問內部類時,內部類也必須是靜態的。
11、內部類定義原則
當描述事物時,事物的內部還有事物,該事物用內部類來描述。因為內部事務在使用外部事物的內容。
12、匿名內部類
在成員方法中也可以定義區域性類,但該局部類不能被private
和static
修飾內部類定義在區域性時,不可以被成員修飾符修飾,可以直接訪問外部類中的成員,因為還有外部類中的引用,但是不可以訪問他所在的區域性中的變數,只能訪問final
修飾的區域性變數。
匿名內部類:
1.匿名內部類其實就是內部類的簡寫格式。就是沒名字的內部類。
2.定義匿名內部類的前提:內部類必須繼承乙個類,或者實現介面。
3.匿名內部類的格式:
new
父類或者介面
()4.其實匿名內部類就是乙個匿名子類物件,而且這個物件有點胖,可以理解為帶內容的內部物件。
在成員方法中定義匿名內部類的方法:
public void 成員方法
().重寫或自己特有的方法或覆蓋的方法名
();}
黑馬程式設計師 物件導向
物件導向 1 物件導向 是基於面向過程的一種思想。面向過程 以函式為基礎,關注實現過程。物件導向 以物件為基礎,關注實現結果。2 物件導向的思想特點 a 是一種更符合人們思考習慣的思想。b 把複雜的事情簡單化了。c 把我們從執行者變成了指揮者。舉例 買電腦。洗衣,做飯。旅遊。把大象裝進冰箱。體現 c...
黑馬程式設計師 物件導向
物件導向是一種思想,把複雜事物簡單化,把面向過程的執行者變成了指揮者。過程其實就是函式,而物件將函式和一些內容封裝。把事物的屬性和行為封裝成物件,再把物件抽象成類。類的訪問修飾符有public和final。而成員的修飾符有public private protected static 成員變數和區域...
黑馬程式設計師 物件導向思想
物件導向的思想 誰有資料,誰就對外提供操作這些資料的方法。例子1 人在黑板畫圓 public class circle private int radius 1 public circle circlecenter,radius public void draw int circlecenter,i...