學(xué)習(xí)記錄之面向?qū)ο?
必須聲明同時(shí)初始化
常常由類(lèi)名來(lái)訪問(wèn),不能被改變
建議:常量名所有字母都大寫(xiě),多個(gè)單詞用_分隔
編譯器在編譯時(shí)會(huì)將常量直接替換為具體的值,效率高
由abstract修飾
只有方法的定義,沒(méi)有具體的實(shí)現(xiàn)(連{}都沒(méi)有)
抽象類(lèi):
封裝共有的屬性和行為-----------------代碼復(fù)用
為所有派生類(lèi)提供統(tǒng)一的類(lèi)型--------向上造型(代碼復(fù)用)
重寫(xiě)所有抽象方法-------------------變不完整為完整
也聲明為抽象類(lèi)-----------------------一般不這么用
由abstract修飾
包含抽象方法的類(lèi)必須是抽象類(lèi),不包含抽象方法的類(lèi)也可以聲明為抽象類(lèi)
抽象類(lèi)不能被實(shí)例化(new對(duì)象)
抽象類(lèi)是需要被繼承的,派生類(lèi):
抽象類(lèi)的意義:
封裝共有的屬性和行為-----------------代碼復(fù)用
為所有派生類(lèi)提供統(tǒng)一的類(lèi)型--------向上造型(代碼復(fù)用)
可以包含抽象方法,為所有派生類(lèi)提供統(tǒng)一的入口(能點(diǎn)出來(lái)),派生類(lèi)的具體實(shí)現(xiàn)不同,但入口是一致的,同時(shí)達(dá)到強(qiáng)制必須重寫(xiě)的目的
類(lèi)中套類(lèi),外面的稱(chēng)為外部類(lèi),里面的稱(chēng)為內(nèi)部類(lèi)
內(nèi)部類(lèi)通常只服務(wù)于外部類(lèi),對(duì)外不具備可見(jiàn)性
內(nèi)部類(lèi)對(duì)象通常在外部類(lèi)中創(chuàng)建
內(nèi)部類(lèi)中可以直接訪問(wèn)外部類(lèi)的成員(包括私有的)
若想創(chuàng)建一個(gè)類(lèi)(派生類(lèi))的對(duì)象,并且對(duì)象只被創(chuàng)建一次,可以做成匿名內(nèi)部類(lèi)
是一種引用數(shù)據(jù)類(lèi)型
由interface定義
只能包含常量和抽象方法
接口不能被實(shí)例化(new對(duì)象)
接口是需要被實(shí)現(xiàn)/繼承的,實(shí)現(xiàn)類(lèi)/派生類(lèi):必須重寫(xiě)所有抽象方法
一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,用逗號(hào)分隔。若又繼承又實(shí)現(xiàn)時(shí),應(yīng)先繼承后實(shí)現(xiàn)
類(lèi)和類(lèi)-------------------------繼承
接口和接口-------------------繼承
類(lèi)和接口----------------------實(shí)現(xiàn)
設(shè)計(jì)規(guī)則:
將所有派生類(lèi)所共有的屬性和行為,抽到超類(lèi)中----------------------抽共性
若派生類(lèi)的行為都一樣,設(shè)計(jì)為普通方法
若派生類(lèi)的行為都不一樣,設(shè)計(jì)為抽象方法
將部分派生類(lèi)所共有的屬性和行為,抽到接口中
接口是對(duì)繼承單根性的擴(kuò)展-----------------------------------實(shí)現(xiàn)多繼承
接口是一個(gè)標(biāo)準(zhǔn)、規(guī)定----------后期慢慢體會(huì),現(xiàn)在先不需要糾結(jié)
如何調(diào)錯(cuò):
將方法的調(diào)用都注釋起來(lái),然后一個(gè)一個(gè)的放開(kāi),放開(kāi)哪個(gè)報(bào)錯(cuò)問(wèn)題就在哪個(gè)方法
快速鎖定問(wèn)題方法:
打樁:System.out.println(數(shù)據(jù));
意義:
同一個(gè)對(duì)象被造型為不同的類(lèi)型時(shí),有不同的功能
---對(duì)象多態(tài):我、你、水-------------------所有對(duì)象都是多態(tài)的(明天再詳細(xì)討論)
同一類(lèi)型的引用指向不同的對(duì)象時(shí),有不同的實(shí)現(xiàn)
---行為多態(tài):cut(),move(),getImage()......---------所有抽象方法都是多態(tài)的
向上造型:
超類(lèi)型的引用指向派生類(lèi)的對(duì)象
能點(diǎn)出來(lái)什么,看引用的類(lèi)型
能造型成為的類(lèi)型有:超類(lèi)+所實(shí)現(xiàn)的接口
強(qiáng)轉(zhuǎn)類(lèi)型轉(zhuǎn)換,成功的條件只有如下兩種:
引用所指向的對(duì)象,就是該類(lèi)型
引用所指向的對(duì)象,實(shí)現(xiàn)了該接口或繼承了該類(lèi)
強(qiáng)轉(zhuǎn)時(shí)若不滿足如上條件,則發(fā)生ClassCastException類(lèi)型轉(zhuǎn)換異常
java.lang.String使用final修飾,不能被繼承
java中的String采用Unicode編碼格式,任何一個(gè)字符都占用兩個(gè)字節(jié)
String字符串底層封裝了字符數(shù)組
java對(duì)字符串有一個(gè)優(yōu)化措施:字符串常量池(堆中)