想了很久课梳,簡(jiǎn)書的第一篇文章寫些什么好距辆,自己是個(gè)技術(shù)小白,講不了什么高深的技術(shù)暮刃,那就來聊聊我所認(rèn)知的一些JAVA技術(shù)知識(shí)跨算。
繼承
Java是面向?qū)ο蟪绦蛟O(shè)計(jì)語言。(什么是面向?qū)ο笸职茫谶@里就不嘮叨了)诸蚕,而Java程序是什么?就是通過繼承灾搏、組合對(duì)象形成的一套問題解決方案挫望。通過繼承可以縱觀JAVA語言的所有特性。
繼承是面向?qū)ο缶幊碳夹g(shù)的基石(將復(fù)雜問題簡(jiǎn)單化)狂窑。也是后面所要講的多態(tài)和抽象的前提。通俗來講桑腮,繼承是一個(gè)對(duì)象從另一個(gè)對(duì)象獲取屬性的過程(除了private屬性以外)泉哈,類之間就形成了所謂的等級(jí)關(guān)系。
繼承有以下幾個(gè)特點(diǎn):
- 單一繼承(解決了誰是“母親”的問題)
- IS-A問題(解決了繼承和組合的問題)
- Java所有類都隱式繼承Object基類破讨;
- extends 與 Implement關(guān)鍵詞
多態(tài)
什么是多態(tài)丛晦?同一種行為具有不同表現(xiàn)形態(tài)或者形式的能力這是官方的解釋,聽起來一頭霧水提陶。我的理解是:多態(tài)是對(duì)象的多種表現(xiàn)形式烫沙,即向上轉(zhuǎn)型。
多態(tài)的前提是:
- 繼承
- 動(dòng)態(tài)綁定
有人問什么是動(dòng)態(tài)綁定隙笆,《Java編程思想》給出這樣的解釋:
在在運(yùn)行時(shí)根據(jù)對(duì)象的類型進(jìn)行綁定锌蓄,而與之相反的是前期綁定,編譯時(shí)就確定類型撑柔。>
有人又問瘸爽,Java不是動(dòng)態(tài)編程語言,怎么實(shí)現(xiàn)動(dòng)態(tài)綁定呢铅忿?這是Java語言的一個(gè)特點(diǎn)——反射機(jī)制(后續(xù)更新文章會(huì)講述)
看栗子:
public class Animal{
public Animal(){
}
public void move(){
System.out.println("Animal move");
}
}
public class Dog extends Animal{
public String name;
public Dog(String name){
this.name=name;
}
public void move(){
System.out.println(name+"move");
}
public void eat(){
System.out.println(name+"eat");
}
}
public class Test{
public static void main(String[] args){
Animal dog1=new Dog("dog1");
dog1.move();
//dog1.eat();錯(cuò)誤
Dog dog2=new Dog("dog2");
dog2.move();
dog2.eat();
}
}
執(zhí)行以上程序,輸出結(jié)果為:
dog1.move;
dog2.move;
dog2.eat;
為什么Animal對(duì)象 dog1 輸出的是dog1.move剪决,而不是Animal.move,這是因?yàn)镴AVA語言在運(yùn)行的時(shí)候才確定dog1所指向的對(duì)象是Dog,Dog向上轉(zhuǎn)型為Animal
dog1引用依舊是Animal柑潦,Animal是沒有eat()方法的享言,所以dog1.eat()無法調(diào)用。記得前面繼承所講的么渗鬼,dog1 IS-A Animal览露,但Animal is not a Dog。
抽象
抽象類乍钻,我的理解是肛循,無法創(chuàng)建具體對(duì)象的類是抽象類,抽象類只是一個(gè)特殊的類银择,既然是JAVA中的類多糠,那么就具有其所有的特點(diǎn):繼承、多態(tài)浩考、重寫重載等夹孔;
作用:
- 邏輯接口與實(shí)現(xiàn)分離,結(jié)構(gòu)化析孽;
- 完全解耦搭伤,向上轉(zhuǎn)型;
應(yīng)用:
- 適配器設(shè)計(jì)模式袜瞬;
- 工廠設(shè)計(jì)模式怜俐;
特點(diǎn):
- 包含著abstract 方法的類都是抽象類,抽象類用abstract 來修飾
- 因?yàn)槌橄箢惒荒軐?shí)例化邓尤,所以必須被繼承拍鲤;
- 接口是極度抽象化的類;
- 任何子類必須重寫父類的抽象方法汞扎;
詳情: - 詳情請(qǐng)看《Java編程思想》