Java常见面试知识点:继承、接口、多态、代码块
問題:Java常見面試知識點:繼承、接口、多態、代碼塊
答案:
1.繼承
繼承中構造方法的訪問特點
子類中所有的構造方法默認都會訪問父類中無參的構造方法
為什么?
? 子類在初始化的時候,有可能會使用到父類中的數據,如果父類沒有完成初始化,子類將無法使用父類的數據。 子類初始化之前,一定要先完成父類初始化。
怎么初始化?
? 構造方法的第一條語句默認都是:super()
注意:如果我們編寫的類,沒有手動指定定父類,系統也會自動繼承Object(Java繼承體系中的最頂層父類)
看如下代碼:
package com.xy;/*** @ProjectName: day01* @Package: PACKAGE_NAME* @ClassName: Fu* @Author: 楊路恒* @Description:* @Date: 2021/8/10 0010 18:53* @Version: 1.0*/ public class Fu {int a;public Fu(){this.a=6;}public void show(){System.out.println("1");} }package com.xy;/*** @ProjectName: day01* @Package: com.xy* @ClassName: Zi* @Author: 楊路恒* @Description:* @Date: 2021/8/10 0010 18:53* @Version: 1.0*/ public class Zi extends Fu {int a;public Zi(){//子類在初始化之前,一定要先完成父類數據的初始化//子類在初始化之前,一定要先訪問到父類的構造方法,完成父類數據的初始化//系統在每一個構造方法中,默認隱藏的一句代碼super()super();this.a=66;System.out.println(this.a);System.out.println(super.a);}public Zi(int a){super();System.out.println(a);}public void show(){System.out.println("2");}public static void main(String[] args) {Zi zi=new Zi();zi.show();/*** 1.方法重寫:在繼承體系中,子類出現了和父類一摸一樣的方法聲明(方法名,參數列表,返回值類型)* 2.方法重載:在同一個類中,方法名相同,參數列表不同,與返回值無關*/} }
繼承中構造方法的訪問特點
如果父類中沒有空參構造方法,只有帶參構造方法,會出現什么現象呢?
?子類通過super,手動調用父類的帶參的構造方法
?子類通過this去調用本類的其他構造方法,本類其他構造方法再通過super去手動調用父類的帶參的構造方法
注意:this(…)super(…)必須放在構造方法的第一行有效語句,并且二者不能共存。
2.抽象
?抽象方法:將共性的行為(方法)抽取到父類之后,發現該方法的實現邏輯無法在父類中給出具體明確,該方法可以定義為抽象方法。
?抽象類:如果一個類中存在抽象方法,那么該類就必須聲明為抽象類
模板設計模式
?設計模式(Design pattern)是 被反復使用、多數人知曉的、經過分期目的、代碼設計經驗的總結。 使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。
?模板設計模式:把抽象類整體就可以看做成一個模板,模板中不能決定的東西定義成抽象方法
?? 讓使用模板的類(繼承抽象類的類)去重寫抽象方法實現需求。
3.接口
接口中成員的特點
? 成員變量
?? 只能是常量
?? 默認修飾符:public static final
? 構造方法
?? 沒有
? 成員方法
?? 只能是抽象方法
?? 默認修飾符:public abstract
?
JDK8版中接口成員的特點
? JDK8版本后
??? ?允許在接口中定義非方法,但是需要使用關鍵字default修飾,這些方法就是默認方法作用:解決接口升級的問題
接口中默認方法的定義格式:
? 格式:publicdefault返回值類型方法名(參數列表){ }
? 范例:public default void show() { }
接口中默認方法的注意事項:
? 默認方法不是抽象方法,所以不強制被重寫。但是可以被重寫,重寫的時候去掉default關鍵字
? public可以省略,default不能省略
? 如果實現了多個接口,多個接口中存在相同的方法聲明,子類就必須對方法進行重寫
JDK8版中接口成員的特點
? JDK8版本后
??? 1 .允許在接口中定義非抽象方法,但是需要使用關鍵字default修飾,這些方法就是默認方法作用:解決接口升級的問題
??? 2 .接口中允許定義static靜態方法
接口中靜態方法的定義格式:
? 格式:public static返回值類型方法名(參數列表){ }
? 范例:public static void show(){ }
接口中靜態方法的注意事項:
?靜態方法只能通過接口名調用,不能通過實現類名或者對象名調用
? public可以省略,static不能省略
4.代碼塊
代碼塊概述與分類
在Java中,使用{}括起來的代碼被稱為代碼塊
分類:
? 局部代碼塊
?? 位置:方法中定義
?? 作用:限定變量的生命周期,及早釋放,提高內存利用率
? 構造代碼塊
?? 位置:類中方法外定義
?? 特點:每次構造方法執行的時,都會執行該代碼塊中的代碼,并且在構造方法執行前執行
?? 作用:將多個構造方法中相同的代碼,抽取到構造代碼塊中,提高代碼的復用性
? 靜態代碼塊
?? 位置:類中方法外定義
?? 特點:需要通過static關鍵字修飾,隨著類的加載而加載,并且只執行—次
?? 作用:在類加載的時候做一些數據初始化的操作
總結
以上是生活随笔為你收集整理的Java常见面试知识点:继承、接口、多态、代码块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 16 操作系统第四章 文件管理 文件的
- 下一篇: Java面试知识点:Object类、Ma