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