7月21日---關鍵字、抽象方法、抽象類、介面、多型及總結、設計模式
static關鍵字
static 靜態的 用來定義該類中物件共有的屬性
靜態的變數和方法可以通過”類名. “呼叫
靜態只能呼叫靜態 不能使用super 和this
final關鍵字
final最後 最終
用final修飾類 該類不能被繼承
用final修飾方法 該方法不允許被重寫
用final修飾變數 該變數值不允許被修改
全域性變數用final修飾後要立刻賦值
區域性變數可以先聲明後賦值
用static和final修飾後的變數相當於常量
常量命名規則 全部大寫單詞用下劃線隔開
靜態匯入
導包
當定義一個String類的變數是 會自動匯入:lang.*
抽象方法
abstract
抽象方法沒有方法體
抽象方法肯定有抽象類
抽象方法必須在子類中實現,除非子類是抽象類
匿名內部類,一般在只使用一個此類物件的時候使用,
例
Students s = new Students(){ @Override public void run() { // TODO Auto-generated method stub } }; //Students是一個抽象類,Schoolboy是Students的子類,Students s = new Students();是使用不了的,可以用Students s = new Schoolboy();,或者用到一個匿名內部類,相當於建立了一個類繼承了Students類,然後用此類建立了一個物件
介面
interface
只有抽象方法的抽象類可以用介面來表示
介面中只允許有常量和抽象方法
介面中的方法是抽象的,沒有方法體
介面中不能有變數
介面的定義和類的定義很相似,只是關鍵字不同,關鍵字為interface。宣告格式如>下:interface 介面名{}
上面的大括號中為介面體。介面體中包含成員變數定義和方法定義兩部分。
介面體中只進行方法的宣告,不允許提供方法的實現。所以在格式上只存在方法宣告,實際上沒有方法體,而方法體要在實現的類中再去具體定義。
還有一點需要說明的是:如果一個類使用了某個介面,就必須要實現這個介面的所有方法,即使實在沒有內容只是一個空的方法體也不許要寫。而且每個方法都預設是public的,所以實現時程式碼一定要用public做修飾,引數個數,型別以及返回值的型別都必須與介面中的宣告相一致。
例如:
interface Runable { }
介面和抽象類的區別
多型
父類的引用指向子類的物件
多型
例:
Print print = new LGPrint();//LG是Print的子類
Paper paper = new ChenguangPaper();
Ink ink = new BeijingInk();
instanceof
內部類
內部類就是建立在內部的類,是指物件包含的類
建立內部類的方法:
封裝、繼承和多型總結
1、我們可以把JAVA中的類分為以下三種:
類:使用class定義且不含有抽象方法的類。
抽象類:使用abstract class定義的類,它可以含有,也可以不含有抽象方法。
介面:使用interface定義的類。
在這三種類型之間存在下面的繼承規律:
類可以繼承(extends)類,可以繼承(extends)抽象類,可以繼承(implements)介面。
抽象類可以繼承(extends)類,可以繼承(extends)抽象類,可以繼承(implements)介面。
介面只能繼承(extends)介面。
2、繼承(inheritance)
繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的資料或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。這種技術使得複用以前的程式碼非常容易,能夠大大縮短開發週期,降低開發費用。
繼承是為了重用父類程式碼,同時為實現多型性作準備。
3、封裝(encapsulation)
類使得資料和對資料的操作整合在一起,從而對使用該類的其他人來說,可以不管它的實現方法,而只管用它的功能,從而實現所謂的資訊隱藏。 封裝隱藏了類的內部實現機制,從而可以在不影響使用者的前提下改變類的內部結構,同時保護了資料。
4、多型(polymorphism)
方法的重寫、過載與動態連線構成多型性。Java之所以引入多型的概念,原因之一是它在類的繼承問題上和C++不同,後者允許多繼承,這確實給其帶來的非常強大的功能,但是複雜的繼承關係也給C++開發者帶來了更大的麻煩,為了規避風險,Java只允許單繼承,派生類與基類間有IS-A的關 系(即“貓”is a “動物”)。這樣做雖然保證了繼承關係的簡單明瞭,但是勢必在功能上有很大的限制,所以,Java引入了多型性的概念以彌補這點的不足,此外,抽象類和介面也是解決單繼承規定限制的重要手段。同時,多型也是面向物件程式設計的精髓所在。
多型又分為設計時多型和執行時多型,例如過載又被稱為設計時多型,而對於覆蓋或繼承的方法,JAVA執行時系統根據呼叫該方法的例項的型別來決定選擇呼叫哪個方法則被稱為執行時多型。總而言之,面向物件的設計的典型特點就是繼承,封裝和多型,這些特點也是面向物件之所以能如此盛行的關鍵所在。
對於多型,可以總結它為:
一、使用父類型別的引用指向子類的物件;該引用只能呼叫父類中定義的方法和變數;
二、如果子類中重寫了父類中的一個方法,那麼在呼叫這個方法的時候,將會呼叫子類中的這個方法;(動態連線、動態呼叫)
三、變數不能被重寫(覆蓋),"重寫"的概念只針對方法。
重寫和過載
過載(Overloading)
(1) 方法過載是讓類以統一的方式處理不同型別資料的一種手段。多個同名函式同時存在,具有不同的引數個數/型別。
過載Overloading是一個類中多型性的一種表現。
(2) Java的方法過載,就是在類中可以建立多個方法,它們具有相同的名字,但具有不同的引數和不同的定義。
呼叫方法時通過傳遞給它們的不同引數個數和引數型別來決定具體使用哪個方法, 這就是多型性。
(3) 過載的時候,方法名要一樣,但是引數型別和個數不一樣,返回值型別可以相同也可以不相同。無法以返回型別作為過載函式的區分標準。
重寫(Overriding)
(1) 父類與子類之間的多型性,對父類的函式進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。
但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。
(2)若子類中的方法與父類中的某一方法具有相同的方法名、返回型別和引數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
(3)子類函式的訪問修飾許可權不能少於父類的;
設計模式
設計模式分為:單例設計模式和共產設計模式
1.單例設計模式
所謂單例設計模式簡單說就是無論程式如何執行,採用單例設計模式的類(Singleton類)永遠只會有一個例項化物件產生。具體實現步驟如下:
(1)先私有構造器
(2)建立靜態得到物件的方法
(3)穿件物件
(4)在靜態方法中加條件語句
package Print;
public class Students {
private static Students instence;
private Students(){
}
public static Students getInstence(){
if(instence==null){
instence=new Students();
}
return instence;
}
}
package Print;
public class Test {
public static void main(String[] args) {
Students zhangsan = Students.getInstence();
Students lisi = Students.getInstence();
System.out.println(zhangsan);
System.out.println(lisi);
}
}
結果:
[email protected]19e0bfd
[email protected]19e0bfd
2.工廠設計模式
程式在介面和子類之間加入了一個過渡端,通過此過渡端可以動態取得實現了共同介面的子類例項化物件。
例:
要先新建一個File,名稱為config.properties,,在裡面寫ink app或者ink hPP
public Print creatPrint(){
Properties properties = new Properties();
String s = "";
try{
properties.load(new FileInputStream("config.properties"));
s = properties.getProperty("ink");
System.out.println(s);
}catch(IOException e){
e.printStackTrace();
}
Print print = null;
if(s.equals("app")){
print=new HPPrint();
}else if(s.equals("hPP")){
print=new ApplePrint();
}
//Print print = new HPPrint();
return print;
}
相關推薦
7月21日---關鍵字、抽象方法、抽象類、介面、多型及總結、設計模式
static關鍵字 static 靜態的 用來定義該類中物件共有的屬性 靜態的變數和方法可以通過”類名. “呼叫 靜態只能呼叫靜態 不能使用super 和this final關鍵字 final最後 最終 用final修飾類 該類不能被繼承
2018年7月21日軟帝學習筆記
賦值運算子: = 左運算元不能為常量,其運算結果為左值 複合賦值運算子:+=,-=,%=,&=,|= 等 條件運算子:運算元1?運算元2:運算元3 這條語句的意思是若運算元1為真,運算結果為運算元2,否則運算結果為運算元3, ps:它是c語言中唯一的
吾愛破解論壇2018年7月21日暑假開放註冊
吾愛破解論壇從2008年3月13日建立以來,陪伴眾多壇友走過了10年艱辛而輝煌的風雨歷程,以帶領新手走入密界大門為基礎,彙集了一大批愛好者在此棲息,今天我們依然堅持我們的初衷,希望在起到承上啟下的作用,帶領愛好者們走入密界的聖殿。 為了讓論
西安7月21日「擁抱開源,又見.NET:壹週年Party」線下交流活動
本次活動既是.NET西安社群的第四次線下交流活動,也是.NET西安社群成立一週年慶活動。.NET西安社群2018年7月20日成立,經過一年時間的發展,社群共舉辦過3次大型線下交流活動,社群人數由最初的幾十人增加到400多人,我們歡迎也希望有更多技術愛好者加入到社群中來。 .NE
7月26日雲棲精選夜讀:MySQL金融版線上發布會:它為什麽是金融企業的首選_技術大佬、產品和神秘嘉賓本位“演繹”
user 社區 出發 嵌入式 幹貨 購物 開發 想法 log 原文地址 2017年8月10日,雲棲社區將迎來一場特殊的直播——阿裏雲數據庫MySQL金融版線上發布會。 屆時,我們不僅請到了阿裏雲金融業務部總監九河、阿裏雲數據庫掌門人褚霸以及阿裏雲數據庫產
灰犀牛之2017年8月21日,四川九寨溝發生7.0級地震
log 四川 image 技術分享 現在 cnblogs logs 記錄 2008年 北京時間8月8日21時19分46秒,四川阿壩藏族羌族自治州九寨溝縣(北緯33.20度,東經103.82度)發生7.0級地震,震源深度20千米,此後又發生多次余震。四川、甘肅、青海、寧夏、陜
7月2日 Django 生成驗證碼、
orm with tex quest 大小 obj randint http 得到 html頁面裏 {# 驗證碼 #} <div class="form-group " id="v-code-wrapper"> <label
Android GreenDao 在組件化項目中的一個問題 - 2018年7月5日21:15:14
src 組件化 一個 gradle 項目 如果 7月 height greendao 組件化項目使用GreenDao時註意的事項: 1.要在組件化中的基礎庫(domain層)創建實體類; 2.如果sycn之後不能生產Dao文件,先把 module 的buil
7月16日任務 shell中的函式 、shell中的陣列、告警系統需求分析
20.16 shell中的函式 函式就是把一段程式碼整理到了一個小單元中,並給這個小單元起一個名字,當用到這段程式碼時直接呼叫這個小單元的名字即可。 格式: function f_name() { &nbs
webstorm最新破解方法(18年12月21日)
1.開啟獲取註冊碼頁面 http://idea.lanyus.com/ 2.點選獲取註冊碼按鈕 3.註冊碼使用前請將“0.0.0.0 account.jetbrains.com”新增到hosts檔案中 hosts檔案目錄:c:\windows\system32\drive
SQL2000系統表、儲存過程、函式的功能介紹及應用2009年01月21日 星期三 11:38雖然使用系統儲存過程、系統函式與資訊架構檢視已經可以為我們提供了相當豐富的元資料資訊,但是對於某些特殊的元資料資訊,我們仍然需要直接對系統表進行查詢。因為SQL
雖然使用系統儲存過程、系統函式與資訊架構檢視已經可以為我們提供了相當豐富的元資料資訊,但是對於某些特殊的元資料資訊,我們仍然需要直接對系統表進行查詢。因為SQL Server 將所有資料庫物件的資訊均存放在系統表中,作為 SQL Server 的管理、開發人員,瞭解各個系統表的作用將有助於我們瞭解 SQL
5.4-全棧Java筆記:面向對象進階之對象的轉型 | FINAL關鍵字 |抽象方法和抽象類
java對象的轉型(casting)引用變量只能調用它編譯類型的方法,不能調用它運行類型的方法。這時,我們就需要進行類型的強制轉換!【示例1】對象的轉型public class TestCasting { public static void main(String[] args) {
嚴肅7月2日
delete 購物車 搜索 select 緩存 多種方式 ont font ... 7月2日獲得的知識記錄: 莫緊張,不會就裝23333。條理清晰,膽子肥一點,嗯。 Select *在搜索數據庫時,最好將需要的寫出來不要select * from。 Id最好是信息中有用
7月5日雲棲精選夜讀:物聯網技術在農業領域的應用
5.1 tps 傳輸 詳解 won repl 深度 alt lang 原文鏈接 近年來,世界農業物聯網技術不斷發展,在農業物聯網感知技術、數據傳輸技術、智能處理技術等方面取得了很大的進展,隨著現代農業自動化需求的不斷增長和信息技術的發展,農業物聯網在物理感知、數據傳輸、
7月9日小練習
練習 1.程序截圖:2.程序截圖:7月9日小練習
python--for循環(2017年7月13日)
運行 continue break 判斷語句 -- for循環 cnblogs 一次循環 bre on old boy 斷點 ---調試---可以查看程序運行的具體操作流程。 continue --跳出本次循環,繼續到下一次循環。 break -- 結束整個循環。 ----
7月15日
代碼 對齊 spa 變量 -1 style nbsp images 不能 1.。。。。if 語句可以用and 連接,但是變量必須用==連接,不可用=連接。 還有if語句中,要考慮到程序代碼執行時,會先執行前面代碼,前面一條代碼錯誤時,會立即跳出這個IF語句,後面代碼不會執行
7月16日
組合數 nbsp 乘法 gcd 問題 表達式 合數 函數 如何 數論第一章:矩陣乘法。 包含知識點: 1. 矩陣乘法 2. 矩陣快速冪 3. 根據題目所給數據範圍確認使用矩陣快速冪 4. 如何將一些問題轉換成矩陣快速冪(難點) 5. 如何根據題目推導出矩陣的表達式(難點)
【學習筆記】2017年7月18日MySQL測試:模擬QQ數據庫
關系 ref sts one database 等級 weight insert phone 模擬測試: QQ數據庫管理 一、創建數據庫並添加關系和測試數據 1 ##創建QQ數據庫,完成簡單的測試 2 3 #創建數據庫 4 DROP DATABASE IF EX
7月18日
put sco break cor pri elif += continue 代碼 # while 條件:# 循環體的代碼1# 循環體的代碼2# 循環體的代碼3# count=0# while count < 10:# print(co