標籤:繼承/多態/介面/抽象類別 代碼塊 形式參數與傳回值關係 內部類 二維數組
一、二維數組
1、定義方式
m:代表當前二維數組中有多少個一維數組;n:代表每個一維數組的長度
(1)資料類型[][] 數組名=new 資料類型[m][n]
(2)資料類型[][] 數組名=new 資料類型[m][ ],只給定m個一維數組,每個一維數組長度動態給定。
(3)資料類型[][] 數組名={{元素1,元素2,......}...{......}},靜態初始化。
(4)資料類型[] 數組名[]=new 資料類型[m][n]
(5)資料類型 數組名[][]=new 資料類型[m][n]
例如:
運行結果:
二、代碼塊
(1)概述:用{}括起來的統稱為代碼塊。
(2)分類及其特點:
A、局部代碼塊:在main()方法裡,限定變數的生命週期,外部不能訪問局部代碼塊中的變數;
B、構造代碼塊:在一個類的成員方法中,用{}括起來,可將多個方法中相同代碼塊放到構造代碼塊中,對對象進行初始化,在每次執行構造方法之前,先執行構造代碼塊;
C、靜態代碼塊:在一個類的成員位置中,用{}括起來,被Static修飾,一般情況下,用於給類進行初始化,並且只能執行一次。
(3)靜態代碼塊,構造代碼塊,構造方法的執行流程:靜態代碼塊>構造代碼塊>構造方法。
例如:
三、繼承
1、概述:多個類存在相同屬性或行為時,將這些內容抽取到一個單獨的類中,多個類無需再定義這些屬性或行為,只需要繼承那個類即可。其中被繼承的類稱為父類、基類或超類,繼承的類稱為子類或衍生類別。
2、關鍵字:extends。
3、子類繼承格式:
Class 子類名 extends 父類名{......}
4、設計原則:高內聚低耦合。內聚是指實現一個功能的能力(能用一個類完成的事情盡量不要用多個類去完成),耦合指類與類之間的關係,盡量降低耦合性。
5、繼承特點:
(1)只支援單繼承,不支援多繼承(一個類只能有一個父類,不能有多個父類);
(2)支援多層繼承(繼承體系)。例如:
Class A{}
Class B extends A{}
Class C extends B{}
(3)子類繼承父類,是繼承了父類的所有成員(成員變數、成員方法,包括私人),但子類不能直接存取父類的私人成員,只能通過父類的公用存取方法間接的讓子類去訪問。
6、注意事項:
(1)子類可繼承父類所有成員(成員方法、成員變數),但是父類中的私人成員,子類只能通過在父類中建立公有方法間接去訪問,不能直接去訪問;
(2)子類不能繼承父類的構造方法,但可通過super關鍵字去訪問父類構造方法;
(3)不能為部分功能而去使用繼承,當類與類之間的關係體現的是“is a”的時候使用繼承。
(4)例如:
7、super關鍵字
(1)super代表父類的空間標識(即父類的引用或父類的對象)。
(2)super與this類似,區別如下:
this:表示對本類的引用。
Super:代表父類儲存空間的標識(可理解為父類引用)。
(3)用法(this與super均可如下使用):
A、訪問成員變數:this.成員變數名、super.成員變數名
B、訪問構造方法:無參:this()、super();有參:this(...)、super(...)
C、訪問成員方法:this.成員方法()、super.成員方法()
8、繼承中成員變數的關係
在子類方法中訪問一個變數:(1)首先在子類局部範圍找;(2)其次在子類成員範圍找;(3)最後在父類成員範圍找(絕對不能訪問到父類局部範圍)。
當子類中定義的成員變數與父類中的成員變數名稱一致時,若用子類的方法訪問該成員變數時,訪問的是子類的成員變數。
9、繼承中成員方法的關係
(1)子類訪問父類,當成員方法名不一致的情況下,分別調用。
(2)當子類中成員方法名與父類中成員方法名一致的情況下:先在子類中的成員方法找,若有則調用,若無,則在父類中的成員方法找。
10、繼承中構造方法的關係
(1)子類中所有的構造方法預設都會訪問父類中空參數的構造方法。子類會繼承父類中的資料,可能還會使用父類中的資料,所以子類初始化前一定要先完成父類資料的初始化,為實現這個效果,在子類構造方法的第一條語句上都預設有一個super()。
(2)若父類中沒有構造方法,則:a、提供父類的構造方法;b、子類通過super關鍵字去顯示訪問父類其他的帶參構造方法;c、子類通過this調用本類的其他構造方法(有參構造),間接訪問父類的帶參構造方法(子類必須有一個帶參構造方法或無參構造方法,讓父類進行初始化。
(3)注意:super和this都預設在構造方法中的第一句且必須在第一句,否則會有父類資料的多次初始化,可省略。
11、繼承中初始化
(1)初始化方式:分層初始化。
(2)初始化順序:子類繼承父類,父類先進行初始化,子類再進行初始化。
(3)例如:
12、繼承優點
(1)提高了代碼的複用性(多個類相同的成員放在同一個類中);
(2)提高了代碼的維護性(若功能代碼需要修改,修改一次即可);
(3)多態的前提,讓類與類之間產生了關係。
四、多態
1、多態概述:多態是指允許不同類的對象對同一訊息作出響應。即同一訊息可根據發送對象的不同而採用多種不同的行為方式(發送訊息指方法調用)。
2、多態前提
(1)必須有繼承關係;
(2)必須有方法重寫(方法覆蓋);
(3)必須有父類的應用指向子類對象(向上轉型):父類名 對象名=new 子類名();。
3、多態中的訪問特點
(1)成員變數:編譯看左,運行看左;
(2)成員方法(非靜態):編譯看左,運行看右(存在方法重寫);
(3)成員方法(靜態):編譯看左,運行看左(靜態和類相關,算不上方法重寫);
(4)構造方法:構造方法無論是子類還是父類,都是對對象進行初始化。
4、向上轉型/向下轉型
(1)向上轉型:將父類的引用指向子類對象,父類名 父類引用=new 子類名()。
(2)向下轉型:將子類的應用指向父類引用,子類名 子類引用=(子類名) 父類引用,向下轉型前提是必須有父類引用,若使用不當,會出現運行時期異常,即ClassCastException。
(3)舉例:
5、多態優勢
(1)提供代碼的複用性,由繼承保證;
(2)提供代碼擴充性,由多態保證。
6、多態弊端
(1)弊端:無法訪問子類的特有功能。
(2)解決方案:利用向下轉型,即將子類的應用指向父類引用,子類名 子類引用=(子類名) 父類引用,向下轉型前提是必須有父類引用,若使用不當,會出現運行時期異常,即ClassCastException。
7、final關鍵字
(1)概述:final,最終的,終態的(不能被修改)。
(2)作用:可修飾類、成員方法、變數。
(3)特點:a、可修飾類,但該類不能被繼承,所以聲明類時不能和abstract同時存在;b、可修飾成員方法,但成員方法不能被重寫;c、可修飾變數,此時變數為常量,不能被修改;d、被final修飾只能賦值一次;e、被final修飾時進行初始化和賦值是在使用之前;f、final既可修飾基礎資料型別 (Elementary Data Type),也可修飾引用資料類型,若修飾基礎資料型別 (Elementary Data Type),基礎資料型別 (Elementary Data Type)的值不可被改變,若使用引用資料類型,引用資料類型的地址值不能被改變,但堆記憶體中的成員變數值可改變。
(4)final關鍵字的面試題:
面試題:final、finally、finalize三者區別?
回答:A、final修飾符(關鍵字),主要用來修飾類、成員方法,變數等,表示終態的,最終的。主要作用a、可修飾類,但該類不能被繼承,所以聲明類時abstract不能和final同時存在;b、可修飾成員方法,但成員方法只能使用不能被重寫;c、可修飾變數,此時變數為常量,不能被修改而且必須在聲明時給出變數的初始值。
B、finally是在異常處理時提供finally塊來執行任何操作。無論有無異常拋出、捕獲,finally塊都會被執行。所以在代碼邏輯塊中若有無論發生什麼都必須執行的代碼,就放在finally塊中。
C、finalize是方法名。Java技術允許使用finalize()方法在記憶體回收行程將對象從記憶體中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。該方法在Object類中定義的,因此所有的類都繼承了它。子類覆蓋finalize()方法以整理系統資源或者被執行的其他清理工作。Finalize()方法是在記憶體回收行程刪除對象之前對這個對象調用的。
五、抽象類別
1、概述:如果一個類中有一個方法聲明抽象功能(抽象方法),則這個類定義為抽象類別。其中一個類若有抽象方法,則這個類一定為抽象類別;抽象類別中不一定都是抽象方法。
2、關鍵字:abstract
3、抽象類別的子類
(1)當子類為具體類時,子類必須實現父類中的抽象功能。
(2)當子類為抽象類別時,無意義,不能執行個體化,不能建立對象。
4、特點:抽象類別不能直接執行個體化,即不能建立對象。
5、抽象類別成員特點
(1)成員變數:可以是常量,也可以是變數。
(2)成員方法:可以有抽象方法,也可以有非抽象方法。
(3)構造方法:可以有無參構造方法,也可以有有參構造方法,作用:給對象進行初始化。
6、不能與abstract共存的關鍵字:private、final、static。
7、舉例:抽象類別:
子實作類別:
測試類別:
六、介面
1、概述:介面是事物擴充×××的一個體現。
2、關鍵字:interface
3、格式:interface 介面名{//抽象功能}
4、介面的子實作類別格式:class 類名+impl implements 介面名{}
5、特點:不能執行個體化。
6、介面成員特點
(1)成員變數:是一個常量,不能修改,並且有預設修飾符public static final;
(2)構造方法:介面不存在構造方法;
(3)成員方法:不能有方法體,都是抽象方法,有預設修飾符:public abstract。
7、介面、類的關係
(1)類與類之間的關係:繼承關係,只支援單繼承,不支援多繼承,可以多層繼承。
(2)類與介面的關係:實現關係,一個類繼承另一個類的同時,還可以實現多個介面。
(3)介面與介面的關係:是一種繼承關係,既可以單繼承,也可以多繼承。
8、介面與抽象類別的區別
(1)成員區別
成員變數:
抽象類別:既可以常量,也可以是變數。
介面:只能是常量,預設的修飾符:public static final
構造方法:
抽象類別:有構造方法,無參/有參 (給對象進行初始化的)。
介面:無構造方法。
成員方法:
抽象類別:可以有抽象方法,也可以有非抽象方法。
介面:只有抽象方法 ,預設的修飾符:public abstract
(2)類與類/類與介面/介面與介面關係的區別
類與類之間的關係:繼承關係,只支援單繼承,不支援多繼承,可以多層繼承。
類與介面的關係:實現關係,一個類繼承另一個類的同時,還可以實現多個介面。
介面與介面的關係:是一種繼承關係,既可以單繼承,也可以多繼承。
介面1 extends 介面2,介面3...介面 n
(3)設計原則的區別
抽象類別:繼承關係,體現的是一種"is a"的關係(A是B的一種)。
介面:類和介面,實現關係,體現的是一種" like a"的關係(擴充功能)。
9、實際開發中使用頻率
(1)介面多態:使用最多。
(2)抽象類別多態:比較多。
(3)具體對象的建立:經常會使用。
10、舉例
抽象類別:
子實作類別學生:
子實作類別老師:
介面+測試:
七、內部類
1、概述:在B類內部定義A類,則A類為B類的內部類。
2、內部類訪問外部類:內部類可直接存取外部類的成員,包括私人成員。
3、外部類訪問內部類:通過建立內部類對象的方式間接訪問。
訪問格式:外部類名.內部類名 對象名=外部類對象.內部類對象。
例如:
4、分類
(1)成員內部類:在外部類的成員位置。可直接存取外部類的成員,包括私人成員。
成員內部類修飾符:A、private:(作用)保證了資料的安全性。B、static:把靜態內部類看成外部類成員,其特點是靜態內部類訪問外部類資料,該資料必須用static修飾。
例如:
(2)局部內部類:在外部類的局部位置。可訪問外部類的成員,包括私人。在外部類的局部位置去訪問內部類的成員方法時,需要在局部位置建立內部類對象,通過對象去訪問。
例如:
(3)匿名內部類
A、前提:有類(該類可以是具體類也可以是抽象類別)或介面。
B、格式:new 類名或介面名{ 方法重寫();}
C、本質:繼承了該類或實現了該介面子類對象。
D、匿名內部類面試題:補全代碼,在控制台上輸出(“Hello World”)。如下:
八、形式參數與傳回值
1、概述:形式參數是基本類型,對實際參數無影響;形式參數是參考型別(類、抽象類別、介面),影響實際參數,情況如下。傳回值是基本類型時,用對應的基本類型接收資料即可;傳回值若為參考型別,情況如下。
2、形式參數為具體類:需要提供該類對象。
傳回值:該類對象。
例如:
3、形式參數為介面:需要提供介面的子實作類別,通過子實作類別進行執行個體化(介面多態)。
例如:
4、形式參數為抽象類別:需要提供該抽象類別的子類,以抽象類別多態的形式建立對象。
傳回值:需要當前抽象類別的子類對象(抽象類別多態)。
例如:
九、overload與override區別
(1)overload:方法重載,方法名一樣,參數不同(個數或類型不同),與傳回值無關。
(2)override:方法重寫,子類定義一個與父類一樣的方法聲明,繼承中使用。
java面向基本知識以及二維數組基本知識