Java是一種可以撰寫(xiě)跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開(kāi)發(fā)者專(zhuān)業(yè)社群。

給你學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫(kù)-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm
那么現(xiàn)在就讓我們今天一起來(lái)
了解面向?qū)ο蟀桑?/b>
抽象類(lèi)
定義
包含抽象方法的類(lèi)稱為抽象類(lèi)
那我們說(shuō)一下抽象方法
一種特殊的方法
它只有聲明沒(méi)有具體的實(shí)現(xiàn)
抽象方法的聲明格式為:
abstract void methodName();
抽象方法
必須用 abstract 關(guān)鍵字進(jìn)行修飾
如果一個(gè)類(lèi)含有抽象方法
則稱這個(gè)類(lèi)為抽象類(lèi)
抽象類(lèi)
必須在類(lèi)前用 abstract 關(guān)鍵字修飾
因?yàn)槌橄箢?lèi)中含有無(wú)具體實(shí)現(xiàn)的方法
所以不能用抽象類(lèi)創(chuàng)建對(duì)象
要你何用
娜姐在之前的就有說(shuō)過(guò)
類(lèi)是抽象的概念!
把具體的對(duì)象身上
擁有的屬性和方法抽取出來(lái)形成了類(lèi)
這就是普通的類(lèi)
可以用來(lái) new 對(duì)象
那么抽象類(lèi)就是擁有抽象方法的類(lèi)
這個(gè)抽象方法就是把具體實(shí)現(xiàn)的方法提取出來(lái)的
重點(diǎn)
知識(shí)點(diǎn)來(lái)了
我們現(xiàn)在擁有三個(gè)類(lèi)
Dog(狗)
Bird(鳥(niǎo))
Fish(魚(yú))
這三種都是動(dòng)物對(duì)不對(duì)!
我們現(xiàn)在創(chuàng)建了一個(gè)動(dòng)物類(lèi)
那很顯然動(dòng)物都有 move(移動(dòng))方法
但是我們不能具體的規(guī)定說(shuō)
會(huì)飛的
(或者會(huì)跑,會(huì)游泳的)
才是動(dòng)物
小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零,五五四,六零七 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!
這個(gè)時(shí)候抽象方法就有用了
我知道動(dòng)物會(huì)移動(dòng)
具體怎么實(shí)現(xiàn)移動(dòng)的方法
看你是什么物種
你自己去實(shí)現(xiàn)
這就是抽象類(lèi)的使用了
(伙伴有時(shí)間可以看一下生物中關(guān)于物種劃分的知識(shí),我覺(jué)得很有利于我們理解像繼承,抽象類(lèi)的概念)
抽象類(lèi)和普通類(lèi)的主要區(qū)別
抽象方法必須為 public 或 protected
(因?yàn)?private ,不能被子類(lèi)繼承,子類(lèi)便無(wú)法實(shí)現(xiàn)該方法)
缺省情況下默認(rèn)為 public
抽象類(lèi)不能用來(lái)創(chuàng)建對(duì)象
如果一個(gè)類(lèi)繼承于一個(gè)抽象類(lèi)
則子類(lèi)必須實(shí)現(xiàn)父類(lèi)的抽象方法
如果子類(lèi)沒(méi)有實(shí)現(xiàn)父類(lèi)的抽象方法
必須將子類(lèi)也定義為為 abstract 類(lèi)
其他方面抽象類(lèi)和普通的類(lèi)并沒(méi)有區(qū)別
接口
接口語(yǔ)法:
修飾符 interface 接口名 {}
接口也是引用類(lèi)型,可以等同看作一個(gè)類(lèi)
1.接口中只能出現(xiàn)常量 ,抽象方法。
2.接口其實(shí)是一個(gè)特殊的抽象類(lèi),特殊在接口是完全抽象的。
3.接口中沒(méi)有構(gòu)造方法,不能被實(shí)例化。
4.類(lèi)是單繼承,但是接口和接口之間可以多繼承。
5.接口是多實(shí)現(xiàn),一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口(這里的實(shí)現(xiàn)可以等同看作"繼承”)。
6.實(shí)現(xiàn)的關(guān)鍵字:implements
7.一個(gè)非抽象類(lèi)實(shí)現(xiàn)一個(gè)接口,則必須將接口中所有的方法實(shí)現(xiàn)。
多態(tài)
java中的多態(tài)
表現(xiàn)形式:
1.父類(lèi)的引用指向子類(lèi)的對(duì)象
2.創(chuàng)建子類(lèi)對(duì)象時(shí),調(diào)用的方法為子類(lèi)重寫(xiě)或繼承的方法
有啥用?
代碼的擴(kuò)展能力增強(qiáng)
編程不要面向?qū)ο竺嫦蚓唧w編程,要面向父類(lèi)面向抽象編程,代碼可擴(kuò)展性才好
3.多態(tài)
概念:對(duì)象的多種形態(tài)
1.引用多態(tài)
父類(lèi)的引用可以指向本類(lèi)對(duì)象
父類(lèi)的引用可以指向子類(lèi)的對(duì)象
2.方法多態(tài)
創(chuàng)建本類(lèi)對(duì)象時(shí),調(diào)用的方法為本類(lèi)方法
創(chuàng)建子類(lèi)對(duì)象時(shí),調(diào)用的方法為子類(lèi)重寫(xiě)或繼承的方法
包和import
現(xiàn)在還有在用記事本練習(xí)寫(xiě)代碼的伙伴嗎?
說(shuō)實(shí)話
小辰當(dāng)初就用了記事本
寫(xiě)了 helloWord 之后
就放棄了記事本。
雖然師傅和我說(shuō)
“用記事本寫(xiě)代碼可以鍛煉能力”
但是
小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零,五五四,六零七 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!
要是用記事本寫(xiě)下去的話
估計(jì)小辰我就放棄編程了
果斷放棄
轉(zhuǎn)用IDE(集成開(kāi)發(fā)環(huán)境)
這邊就不推薦了
總之適合的就是最好的
小辰這邊用 MyEclipse 舉例
首先新建項(xiàng)目
確定了項(xiàng)目名
(見(jiàn)名知意)
然后建包取包名
一般是公司網(wǎng)址倒寫(xiě)
像百度的項(xiàng)目包名就可以這么寫(xiě)
com.baidu.xx
(x表示這個(gè)包是做什么的)
然后就可以在包中新建文件編寫(xiě)代碼了
說(shuō)白了包就是放 Java 文件的文件夾
我們寫(xiě)代碼的時(shí)候,
會(huì)用到許多別人寫(xiě)好的方法!
在使用這些方法的時(shí)候。
需要導(dǎo)包
這個(gè)時(shí)候就需要我們的關(guān)鍵字 import 了
那這張圖看的夠明白了吧!
這是一個(gè)簡(jiǎn)單的求 a+b 兩個(gè)數(shù)的和的代碼
我們用到了一個(gè)叫做 Scanner 的方法
我們是沒(méi)有寫(xiě)這個(gè)代碼的
直接用 import 導(dǎo)入 java.util.Scanner 包
就可以使用這個(gè)方法了
注:
在使用 import 關(guān)鍵字時(shí),可以指定類(lèi)的完整描述
如果為了使用包中更多的類(lèi),
可以在使用 import 關(guān)鍵字指定時(shí)在包指定后加上*,
這表示可以在程序中使用包中的所有類(lèi)。
嗯 這樣解釋夠清楚了吧!
我說(shuō)明白了嗎
內(nèi)部類(lèi)
1.內(nèi)部類(lèi)概序
將一個(gè)類(lèi)定義在另一個(gè)類(lèi)里面,對(duì)里面那個(gè)類(lèi)就稱為內(nèi)部類(lèi)(內(nèi)置類(lèi),嵌套類(lèi))
訪問(wèn)特點(diǎn):
內(nèi)部類(lèi)是外部類(lèi)的一個(gè)成員,因此內(nèi)部類(lèi)可以自由的訪問(wèn)外部類(lèi)的成員,包括私有成員
而外部類(lèi)要訪問(wèn)內(nèi)部類(lèi)中的成員必須要建立內(nèi)部類(lèi)的對(duì)象。
2.成員內(nèi)部類(lèi)
1)成員內(nèi)部類(lèi)可以等同看作成員變量(最重要)
位置:外部類(lèi)類(lèi)體中,方法體之外
2)可以用控制訪問(wèn)權(quán)限的修飾符修飾
3)成員內(nèi)部類(lèi)不能擁有靜態(tài)聲明
4)成員內(nèi)部類(lèi)可以訪問(wèn)外部類(lèi)的所有數(shù)據(jù)
5)成員內(nèi)部類(lèi)如何創(chuàng)建對(duì)象
外部類(lèi) 外部類(lèi)對(duì)象 = new 外部類(lèi)名();
外部類(lèi)名.內(nèi)部類(lèi)名 內(nèi)部類(lèi)對(duì)象 = 外部類(lèi)對(duì)象.new 內(nèi)部類(lèi)名();
3. 局部?jī)?nèi)部類(lèi)
1)局部?jī)?nèi)部類(lèi)可以等同看作局部變量
2)局部?jī)?nèi)部類(lèi)不能用控制訪問(wèn)權(quán)限修飾符修飾
3)局部?jī)?nèi)部類(lèi)不能擁有靜態(tài)聲明
4)重點(diǎn):局部?jī)?nèi)部類(lèi)訪問(wèn)局部變量的時(shí)候,局部變量必須是final修飾的
4.匿名內(nèi)部類(lèi)
就是內(nèi)部類(lèi)的一種簡(jiǎn)化寫(xiě)法,可以調(diào)用其中的方法等等,但是無(wú)法有實(shí)例 化對(duì)象。并且匿名內(nèi)部類(lèi)必須是繼承或者實(shí)現(xiàn)一個(gè)外部類(lèi)或者接口。
由于匿名內(nèi)部類(lèi)沒(méi)有名稱,所以類(lèi)體中不能定義構(gòu)造方法,由于不知道類(lèi)名也不能使用關(guān)鍵字來(lái)創(chuàng)建該類(lèi)的實(shí)例!
5.靜態(tài)內(nèi)部類(lèi)
1)靜態(tài)內(nèi)部類(lèi)可以看作靜態(tài)變量
2)靜態(tài)內(nèi)部類(lèi)可以被控制訪問(wèn)權(quán)限修飾符修飾
3)靜態(tài)內(nèi)部類(lèi)可以聲明靜態(tài)成員,也可以聲明非靜態(tài)成員
4)靜態(tài)內(nèi)部類(lèi)可以直接訪問(wèn)外部類(lèi)的靜態(tài)數(shù)據(jù),但是不能直接訪問(wèn)成員數(shù)據(jù)
5)靜態(tài)內(nèi)部類(lèi)如何產(chǎn)生對(duì)象
小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零,五五四,六零七 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!
內(nèi)部類(lèi)的作用:
(1).內(nèi)部類(lèi)提供了更好的封裝,可以把內(nèi)部類(lèi)隱藏在外部類(lèi)之內(nèi),不允許同一個(gè)包中的其他類(lèi)訪問(wèn)該類(lèi)。
(2).內(nèi)部類(lèi)成員可以直接訪問(wèn)外部類(lèi)的私有數(shù)據(jù),因?yàn)閮?nèi)部類(lèi)被當(dāng)成其外部類(lèi)成員,同一個(gè)類(lèi)的成員之間可以互相訪問(wèn)。但外部類(lèi)不能訪問(wèn)內(nèi)部類(lèi)的實(shí)現(xiàn)細(xì)節(jié)。
(3).匿名內(nèi)部類(lèi)適用于創(chuàng)建那些僅需要一次使用的類(lèi)。
(4).內(nèi)部類(lèi)比外部類(lèi)可以多使用三個(gè)修飾符:private、protected、static——外部類(lèi)不可以使用這三個(gè)修飾符。
(5).非靜態(tài)內(nèi)部類(lèi)不能擁有靜態(tài)成員。
概念有點(diǎn)多但是很重要呢 伙伴們加油了!


