访问修饰符、常见的包以及包的权限和包的导入(inport关键字)、继承(super关键字)、多态(向上和向下转型)
IDEA中快捷生成getter/setter的快捷鍵為 alt+inser(enter)
getter/setter命名規范:都是以gte/set單詞開頭+要操作的屬性名稱
一、訪問修飾符
Java中有四個關于權限的關鍵字,權限從小到大為:
1.1.private(當前類內部可見)<default(不需要寫這個單詞,默認訪問權限)包(文件夾)訪問權限,當前包的內部可見(子包都不可見!!!!)<protected(繼承訪問權限),在不同包的父子類之間可見<public(公共訪問權限),只要是public權限,隨意使用,完全公開
包訪問權限,同一個包中,當且僅當當前這個包中同級的所有類之間可見,其他包(包括子包)都不可見。
2.1protected修飾符(可以簡單理解為protected權限比包權限多了個包外父子類的權限,就不再同一個包下的時候,protected權限也只有繼承是可見)
繼承修飾符,不同包(和父類不同包)的父子類可見
例1:protected的訪問權限包括同包中的父子類嗎?
不同文件夾的父子類之間使用protected都是可見的,更何況還是同一個包,這就更加可見了!!同一個包中,使用包權限都可見,更何況比它還大的protected!
例2:同包中不同類之間(沒有繼承關系)的protected是否可見?
一定可見===》包權限可見的權限和方法,protected一定具備。
例3:public能否修飾外部類?
不能,假設public class Text()=>Text類定義完之后,就消失不見了,Text的外部完全都不知道他的存在!矛盾!
包的命名規范:包的命名采用全小寫,多個單詞之間使用_分隔。
二、包權限
可以在不同的包中創建同名的類!==>類似在操作系統的同一個文件夾內不能創建多個同名同類型的文件,但是在不同的文件夾中,可以創建多個同名稱同類型的文件。
因此在Java中類的全名稱為? 包名.類名來唯一的確定一個類。
三、包的導入
1.1、可以使用import關鍵字來告知編譯器入包(inport關鍵字表示在Java中導入某個包中具體的類,無法直接導入一個文件夾)。
1.2、假設一個包中有多個其他類,我們可以使用通配符*來表示導入(import java.util.*;),此時util中的所有類都可以使用了,具體導入哪個就導入哪個。
1.3使用通配符也有個問題,就是當同一個類中使用多個不同包的同名類,就會產生沖突。(這時時還是顯示導入某個具體類即可,不要使用通配符。即包名.類名)
1.4靜態導入:要使用靜態導入類下的所有靜態方法就只需要調用方法名稱即可,就好像這些方法是自己定義的一樣。
四、JDK中常見的包
1.java.lang:系統常用的基礎類:String,Object(萬物之母),Math,這個包在JDK1.1之后自動導入。
2.java.lang.reflect:反射開發包,反射式是所有框架的基礎。
3.java.util:java提供的工具開發包(所有集合ArrayList,Linkedlist,HashMap等都在這個包中)。
4.java.sql:java數據庫開發相關的包。
5.java.io:io開發包(文件的操作)。
6.java.net:網絡編程開發包 Socket。
五、繼承
1.1將若干個不同的類之間相同的屬性和方法抽象為一個共同的父類,子類只需要擴展自己類中獨有的屬性和方法即可,把當前這種編程屬性,稱之為“繼承”。(代碼的復用,方便進行子類的功能擴展,子類只需要實現自己額外的屬性和功能即可,共有的特性以及行為放在父類中)
1.2要想使用“繼承”,能發生繼承的類之間必須滿足is a原則!!!!!(例:dog is a aminal;cat is a aminal)
1.3在JAVA中使用extends表示繼承一個父類,父類中的所有屬性和方法都會被子類繼承下來,子類只需要關心實現自己獨有的屬性和行為即可,大大減少了重復的代碼,擴展新的子類就更加容易。
2、繼承的使用規則:
2.1 在JAVA中,類的繼承是單繼承,一個類只能使用extends關鍵字繼承一個父類!
2.2 Java中不允許多重繼承,但是允許多層繼承。一般多層繼承最多不超過3層關系。
3.顯示繼承和隱式繼承
3.1?隱示繼承(父類中的某些方法和屬性,子類繼承下來了,但是無法直接使用)和顯示繼承(父類中的某些方法和屬性,子類繼承下來了,隨意使用)
4、訪問父類的屬性
4.1 訪問父類的屬性:子類想要直接訪問父類的屬性,父類中的屬性權限必須>=protected
若顯示繼承,使用父類的屬性,可以直接使用(子類中沒有和父類同名稱的屬性),若子類也定義了父類相同名稱的屬性,則遵從就近原則(先在方法中尋找->再到當前類的內部(即子類中)->最后向上去父類中尋找同名變量。)
例:若父類和子類變量名稱相同,但是類型不同,那訪問誰?
只要在子類中定義了和父類名稱相同的屬性,無關類型使用相同名稱時,調用的都是子類中覆蓋后的變量!
5、?super關鍵字
5.1 如果想要在子類中調用被覆蓋的父類中同名屬性,super修飾屬性,明確表示從父類中尋找同名屬性。
5.2 super.方法名稱表示從父類中尋找方法屬性。
5.3super調用父類中的構造方法
a、若調用的是父類的無參構造,則可以不用寫。
b、若調用的時父類的有參構造,則必須顯示使用super(參數列表),明確表示先調用父類的構造方法。
使用super關鍵字調用方法注意事項:1、在子類中調用父類的構造方法必須放在子類構造方法的首行。2、this(this的構造方法調用也得放在在首行)和super表示構造方法調用時,不能同時出現
5.4super和this關鍵字的不同與相同點
this可以表示當前對象的引用,但是super沒有這個特點,只能引用父類的屬性和方法,super在引用父類的構造方法時必須放在首行;this和super都表示成員域的屬性,這倆關鍵字都不能在靜態域中直接使用
6、?子類中調用父類的方法(重點)
6.1 方法重寫(override)發生在有繼承關系的類之間,子類定義了和父類除了權限不同以外其他全部完全相同(名稱,參數列表,返回值都相同)的方法,稱之為重寫。
6.2 子類重寫后的方法權限>=父類的權限
6.3 在子類中調用被重寫后的父類方法,使用super.方法名稱()表示直接從父類中尋找同名方法。
7、關于父子類對象的產生
7.1 當調用子類構造方法產生子類對象時,JVM會首先調用父類的構造方法先產生父類對象而后在產生子類對象。
六、多態(依賴于繼承與方法重寫實現)
多態:同樣的方法,在使用不同的對象調用時,表示出不同的行為稱之為“多態”。
多態同樣的一個方法的多種狀態(在JAVA中多態依賴于繼承+方法重寫來實現多態性)。
1 final關鍵字
1.1、final修飾的屬性-->a、final修飾基本數據類型,數值在定義后無法修改。(final int a=10-->a就是一個常量,定義后無法修改,只能保存10);b、final修飾引用數據類型,值不能修改,這個值指的是引用保存的地址不能修改!地址中的內容還是可以修改的。
1.2、final修飾方法-->被final修飾的方法不能被重寫!(不允許子類覆蓋).
1.3被final修飾的類不能被繼承,final修飾的類沒有子類。
2.1、在類中定義常量時,一般搭配static(定義在方法區,共同使用,避免空間的浪費)一起使用(不強制,一般來說定義類中的常量,都是靜態全局常量)
3.1、常量的命名規則:
常量使用全大寫命名,多個單詞使用_分隔,常量必須在定義時賦值(不存在默認值)。
final AGE=10;
final String STUDENT_NAME=“小明”;
七、向上轉型
對象的向上轉型其實有點類似于基本數據類型的小類型提升為大類型,自動提升。
向上轉型,new子類實例,子類實例的天然就是父類的包含的范圍之內,滿足天然的is a原則。
向上轉型的優點:
1、參數統一化,方便進行子類的擴展。(假設現在要實現一個方法,接受所有Aminal以及其子類的對象,沒有向上轉型,只能當前類型的引用指向當前類型,若現在Aminal有成百上千個。這個方法就的重載成百上千次,但有了向上轉型,參數統一化,只需要在方法形參規定父類的引用,所有子類對象都能夠使用父類引用來接受。)
2、向上轉型可以方便進行子類的擴展。
1.1、對象向上轉型發生在以下三個位置:
1.1直接賦值
父類名稱? 父類引用=new 子類實例();
父類引用.方法名稱()=>若這個方法被new出來的子類重寫,則調用的一定是重寫后方法。
Aminal animal=new Dog();
1.2方法傳參
1.3方法的返回值
八、向下轉型
1.1.方法的重載:重載發生在同一個類中,方法名稱相同,參數列表不同,與返回值無關。
2.1.方法重寫override:發生在有繼承關系的類之間,子類定義了和父類除了權限不同(子類權限>=父類權限),返回值可以為向上轉型類的返回值之外,參數列表,方法名稱完全相同的方法,就稱之為方法重寫(是對非privat修飾,非final修飾,非構造方法等的實現過程進行重寫縮寫)。
例1.:父類是private權限,子類是public權限,能否重寫?
不能!!私有方法無法被重寫(同時當一個方法被final(屬性:final修飾的屬性不能改;final修飾的方法不能重寫;final修飾的類不能有子類)修飾,說明該方法也不能被重寫)。
例2.static修飾的靜態方法能否被子類重寫???
不能!!因為靜態方法是歸屬與某個類,與對象無關,因此靜態方法不存在方法重寫。
例3.構造方法能否被子類重寫?
不能!!名字不同;構造方法是為了產生對象,無法在子類中修改父類對象如何產生的。
關于方法重寫的返回值,必須相同(除了向上轉型類的返回值之外,其他返回值,只要不相同都不能覆寫)
3.1.父類名稱 父類引用=new 子類實例();
3.2.通過父類引用.操作的屬性和方法,要看父類中是否有這些屬性和方法;若存在,判斷當前調用的這個方法是否被子類重寫,若重寫,則調用的時子類重寫后的方法。
3.3.可以使用注解@Override檢查是否覆寫成功。? ? ? ? ? ? ? ? ·
4.1.向下轉型的兩點說明:
1、要想發生向下轉型,必須首先先進行向上轉型。
2、類型轉換有風險,不能將毫無關系的兩個類之間進行強轉。
可以使用關鍵字instanceof來協助進行向下轉型,只要能進行向下轉型的引用,instanceof關鍵字才會返回true。
總結
以上是生活随笔為你收集整理的访问修饰符、常见的包以及包的权限和包的导入(inport关键字)、继承(super关键字)、多态(向上和向下转型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在迅捷CAD编辑器上修改快捷键
- 下一篇: android手机壳怎么打开吗,一加7