日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

澄清Java語言接口與繼承的本質

瀏覽:172日期:2024-06-24 16:17:38
內容: 大多數人認為,接口的意義在于頂替多重繼承。眾所周知Java沒有c++那樣多重繼承的機制,但是卻能夠實作多個接口。其實這樣做是很牽強的,接口和繼承是完全不同的東西,接口沒有能力代替多重繼承,也沒有這個義務。接口的作用,一言以蔽之,就是標志類的類別(type of class)。把不同類型的類歸于不同的接口,可以更好的管理他們。OO的精髓,我以為,是對對象的抽象,最能體現這一點的就是接口。為什么我們討論設計模式都只針對具備了抽象能力的語言(比如c++、java、c#等),就是因為設計模式所研究的,實際上就是如何合理的去抽象。(cowboy的名言是“抽象就是抽去像的部分,看似調侃,實乃至理)。設計模式中最基礎的是工廠模式(Factory),在我最近的一個很簡單的應用中,我想盡量的讓我的程序能夠在多個數據庫間移植,當然,這涉及很多問題,單是如何兼容不同DBMS的SQL就讓人頭痛。我們不妨先把問題簡單化,只考慮如何連接不同的數據庫。假設我有很多個類,分別是Mysql.java、SQLServer.java、Oracle.java、DB2.java,他們分別連接不同的數據庫,統一返回一個Connection對象,并且都有一個close方法,用于關閉連接。只需要針對你的DBMS,選擇不同的類,就可以用了,但是我的用戶他會使用什么數據庫?我不知道,我希望的是盡量少的修改代碼,就能滿足他的需要。我可以抽象如下接口:package org.bromon.test;public interface DB{java.sql.Connection openDB(String url,String user,String password);void close();} 這個接口只定義兩個方法,沒有任何有實際意義的代碼,具體的代碼由實作這個接口的類來給出,比如Mysql.java:Package org.bromon.test;import java.sql.*;public class Mysql implements DB{private String url=jdbc:mysql:localhost:3306/test;private String user=root;private String password=;private Connection conn;public Connection openDB(url,user,password){//連接數據庫的代碼}public void close(){//關閉數據庫}} 類似的當然還有Oracle.java等等,接口DB給這些類歸了個類,在應用程序中我們這樣定義對象:org.bromon.test.DB myDB;使用myDB來操作數據庫,就可以不用管實際上我所使用的是哪個類,這就是所謂的“開-閉原則。但是問題在于接口是不能實例化的,myDB=new DB(),這樣的代碼是絕對錯誤的,我們只能myDB=new Mysql()或者myDB=new Oracle()。麻煩了,我還是需要指定具體實例化的是哪個類,用了接口跟沒用一樣。所以我們需要一個工廠:package org.bromon.test;public class DBFactory{public static DB Connection getConn(){Return(new Mysql());}} 所以實例化的代碼變成:myDB=DBFactory.getConn();這就是23種模式中最基礎的普通工廠(Factory),工廠類負責具體實例化哪個類,而其他的程序邏輯都是針對DB這個接口進行操作,這就是“針對接口編程。責任都被推卸給工廠類了,當然你也可以繼續定義工廠接口,繼續把責任上拋,這就演變成抽象工廠(Abstract Factory)。整個過程中接口不負責任何具體操作,其他的程序要連接數據庫的話,只需要構造一個DB對象就OK,而不管工廠類如何變化。這就是接口的意義----抽象。繼承的概念不用多說,很好理解。為什么要繼承呢?因為你想重用代碼?這絕對不是理由,繼承的意義也在于抽象,而不是代碼重用。如果對象A有一個run()方法,對象B也想有這個方法,所以有人就Class B extends A。這是不經大腦的做法。如果在B中實例化一個A,調用A的Run()方法,是不是可以達到同樣的目的?如下:Class B{A a=new A();a.run();} 這就是利用類的聚合來重用代碼,是委派模式的雛形,是GoF一貫倡導的做法。那么繼承的意義何在?其實這是歷史原因造成的,最開始的OO語言只有繼承,沒有接口,所以只能以繼承來實現抽象,請一定注意,繼承的本意在于抽象,而非代碼重用(雖然繼承也有這個作用),這是很多Java爛書最嚴重的錯誤之一,它們所造成的陰影,我至今還沒有完全擺脫,壞書害人啊,尤其是入門類的,流毒太大。什么時候應該使用繼承?只在抽象類中使用,其他情況下盡量不使用。抽象類也是不能實例化的,它僅僅提供一個模版而已,這就很能說明問題。軟件開發的萬惡之源,一是重復代碼而不是重用代碼,二是爛用繼承,尤以c++程序員為甚。Java中取締多重繼承,目的就是制止爛用繼承,實是非常明智的做法,不過很多人都不理解。Java能夠更好的體現設計,這是讓我入迷的原因之一。 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd 大多數人認為,接口的意義在于頂替多重繼承。眾所周知Java沒有c++那樣多重繼承的機制,但是卻能夠實作多個接口。其實這樣做是很牽強的,接口和繼承是完全不同的東西,接口沒有能力代替多重繼承,也沒有這個義務。接口的作用,一言以蔽之,就是標志類的類別(type of class)。把不同類型的類歸于不同的接口,可以更好的管理他們
標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美国产中文高清| 蜜臀av在线播放一区二区三区| 蜜桃伊人久久| 日韩中文字幕不卡| 免费黄网站欧美| 午夜精品免费| 亚洲专区一区| 日本精品久久| 国产精品一区二区av交换| 国产日韩欧美三级| 国产在线一区不卡| 欧美色图一区| 日韩中文字幕视频网| 国产乱子精品一区二区在线观看| 国产精品亚洲综合久久| 国产成人精品三级高清久久91| 91成人超碰| 97精品国产福利一区二区三区| 久久不见久久见免费视频7| 国产成人精品福利| 久久精品观看| 亚洲精品四区| 大香伊人久久精品一区二区| 国产极品一区| 私拍精品福利视频在线一区| 丝袜美腿亚洲一区二区图片| 国产欧美精品久久| 一区二区小说| 老鸭窝一区二区久久精品| 亚洲午夜精品久久久久久app| 免费人成在线不卡| 国产aⅴ精品一区二区四区| 婷婷综合在线| 美女毛片一区二区三区四区最新中文字幕亚洲 | 日韩激情视频网站| 水蜜桃久久夜色精品一区| 国产精品99免费看| 国产精品jk白丝蜜臀av小说| 欧美日韩亚洲在线观看| 国产精品久久久久久久久久白浆| 亚洲a在线视频| 青草国产精品| 秋霞国产精品| 日韩高清一区在线 | 超碰在线99| 日韩视频一区| 日本在线精品| 国产精品久久久久av蜜臀| 香蕉成人av| 国产欧美日韩一级| 亚洲18在线| 免费看的黄色欧美网站| 日韩.com| 国产精品多人| 国产精品天天看天天狠| 欧美综合国产| 国产午夜久久| 国产亚洲精品v| 9色国产精品| 黄色亚洲大片免费在线观看| 久久精品影视| 欧美一区二区性| 91久久久精品国产| 成人av动漫在线观看| 伊人影院久久| 美日韩精品视频| 日韩中文一区二区| 国产欧美综合一区二区三区| 97久久超碰| 国产精品www994| 国产乱码精品一区二区亚洲| 日本欧美一区| 麻豆精品一区二区综合av| 国内精品伊人| 国产精品97| 中文字幕亚洲影视| 国产亚洲欧美日韩精品一区二区三区 | 亚洲成人一区在线观看| 国产v综合v| 99热精品久久| 奶水喷射视频一区| 日韩二区在线观看| 国产精品国产三级国产在线观看| 丝袜av一区| 蜜桃一区二区三区在线| 久久精品72免费观看| 日韩在线观看| 亚洲精品在线国产| 精品国产麻豆| 日韩精品一区第一页| 国产免费av一区二区三区| av亚洲一区二区三区| 欧美日韩国产精品一区二区亚洲| 色综合视频一区二区三区日韩| 91九色综合| 亚洲午夜久久久久久尤物| 国产无遮挡裸体免费久久| 亚洲精品.com| 国产精品s色| 亚洲精选91| 亚洲成av在线| 国产精品一区二区精品| 日韩视频一区| 激情国产在线| 国产精品对白| 日韩精品亚洲aⅴ在线影院| 日韩一区电影| 国产精品第十页| 亚洲精品美女| 极品日韩av| 国产白浆在线免费观看| 日本色综合中文字幕| 黄色成人精品网站| 黑人精品一区| 九九久久国产| 国产伦乱精品| 日韩视频1区| 美女国产一区| 爽好多水快深点欧美视频| 视频小说一区二区| 久久久久国产| 午夜av成人| 久久中文字幕av| 亚洲国产综合在线看不卡| 电影91久久久| а√在线中文在线新版| 麻豆成人91精品二区三区| 国产乱人伦丫前精品视频| 国产探花一区二区| 国语精品一区| 日韩在线二区| 今天的高清视频免费播放成人| 91精品一区二区三区综合在线爱| 国产精品久久久久久久免费观看 | 亚洲一区二区av| 欧美一区=区| 日韩一区二区三区在线看| 婷婷综合成人| 国产精品一区二区精品| 福利视频一区| 青青久久av| 国产精品毛片在线看| 婷婷亚洲精品| 老司机免费视频一区二区| 日韩1区在线| 中文日韩在线| 久久国内精品| 国产精品videossex| 欧美成人a交片免费看| 欧美 日韩 国产一区二区在线视频| 午夜免费一区| 久久狠狠亚洲综合| 在线观看精品| 日韩av电影一区| 国产99久久| 欧美视频一区| 欧美1区2区3区| 欧美日韩视频免费看| 欧美一区三区| 国产精品中文字幕制服诱惑| av资源亚洲| 日韩国产成人精品| 视频在线不卡免费观看| 亚洲欧美久久久| 久久精品资源| 久热re这里精品视频在线6| 精品亚洲成人| 91精品丝袜国产高跟在线| 日韩成人综合| 日韩激情综合| 国产真实久久| 精品国产中文字幕第一页| 免费看欧美美女黄的网站| 久久婷婷久久| 国产精品qvod| 国产精品1区| 日本a口亚洲| 亚洲综合福利| 136国产福利精品导航网址| 欧美亚洲一级| 日韩一区二区三区免费视频| 久久国产精品久久w女人spa| 国产在线观看www| 欧美日本三区| 亚洲一区av| 日本综合精品一区| 国产日韩电影| 午夜一区在线| 欧美亚洲国产精品久久| 日韩国产在线| 久草精品视频| 久久亚洲国产精品尤物| 亚洲欧美久久| 中文日韩在线| 国产亚洲永久域名| 国产亚洲福利| 久久亚洲欧美| 免费久久99精品国产| 亚洲一区二区三区四区电影 | 成人精品中文字幕|