成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:118日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产精品久久久久久久久免费丝袜| 亚洲精品视频一区二区| 久久精品欧美日韩| 韩国精品免费视频| 久久蜜桃精品| 亚洲欧美一区二区不卡| 你懂的网址国产 欧美| 精品日本一线二线三线不卡| 蜜桃视频免费观看一区| 亚洲欧美视频| 亚洲激情自拍偷拍| 亚洲黄色高清| 国产精品视频观看| 91社区在线播放| 欧美成人精品福利| 国产乱理伦片在线观看夜一区| 91久久精品一区二区二区| 午夜欧美电影在线观看| 亚洲在线电影| 亚洲成人先锋电影| 久久精精品视频| 日韩激情中文字幕| 色综合久久66| 天天综合网 天天综合色| 一区二区三区我不卡| 久久久一区二区三区捆绑**| 成人精品小蝌蚪| 精品欧美一区二区久久| caoporen国产精品视频| www国产成人免费观看视频 深夜成人网| 国产精品1区2区3区| 欧美美女bb生活片| 国产成人在线网站| 久久综合九色综合97婷婷女人| 99久久精品国产观看| 久久精品人人做人人综合| 91免费观看国产| 国产精品私人自拍| 伊人成人在线| 亚洲视频一区二区在线观看| 亚洲日本久久| 亚洲成人激情社区| 欧美中文字幕一区二区三区亚洲| 国内外精品视频| 欧美一区日韩一区| 成人av网站在线观看| 国产日韩成人精品| 日韩视频在线一区二区三区| 亚洲 欧美综合在线网络| 91传媒视频在线播放| 久久综合综合久久综合| 欧美精品乱码久久久久久| 国产经典欧美精品| 精品成a人在线观看| 欧美一区免费视频| 亚洲人一二三区| 久久久精品动漫| 九色|91porny| 日韩亚洲欧美中文三级| 99国产一区二区三精品乱码| 国产精品乱码妇女bbbb| 国产日韩视频| 美女视频黄免费的久久| 日韩欧美一二三区| 欧美日韩精品一区| 午夜电影一区二区| 欧美日本一区二区在线观看| 成人做爰69片免费看网站| 国产免费成人在线视频| 亚洲欧洲精品一区| 日韩中文字幕亚洲一区二区va在线| 欧美精品tushy高清| www.欧美.com| 亚洲男人的天堂在线观看| 91久久精品一区二区二区| av不卡免费在线观看| 一区二区三区在线不卡| 欧美日韩一区二区三区不卡| 99国产精品久久久久久久久久久| 亚洲男人都懂的| 欧美喷水一区二区| 亚洲一级电影| 美女www一区二区| 久久人人爽人人爽| 亚洲人成人一区二区三区| 九九九久久久精品| 国产精品国产三级国产普通话三级| 一本到不卡免费一区二区| av在线不卡电影| 一区二区三区在线观看网站| 欧美日韩另类国产亚洲欧美一级| 欧美在线免费| 蜜臀av一级做a爰片久久| 久久久精品中文字幕麻豆发布| 久久动漫亚洲| 97精品久久久午夜一区二区三区| 亚洲成人av电影| www久久久久| 日本韩国视频一区二区| av在线不卡电影| 亚洲成人一二三| 国产亚洲成aⅴ人片在线观看| 久久国产欧美精品| 99久久99精品久久久久久| 日韩有码一区二区三区| 亚洲国产精品av| 欧美老年两性高潮| 中日韩在线视频| av激情亚洲男人天堂| 亚洲国产视频直播| 久久美女艺术照精彩视频福利播放| 久久国产主播| 欧美日韩高清免费| 黄页网站大全一区二区| 亚洲欧美中日韩| 91精品国产美女浴室洗澡无遮挡| 精品不卡一区| 国产精品一区二区黑丝| 亚洲一二三四在线观看| 2020国产精品自拍| 欧美色老头old∨ideo| 中文久久精品| 91色九色蝌蚪| 国产在线精品国自产拍免费| 亚洲一区二区欧美日韩| 国产视频视频一区| 欧美疯狂性受xxxxx喷水图片| 亚洲一区二区三区午夜| 91麻豆精品在线观看| 美女国产一区二区| 亚洲一区二区三区国产| 国产精品久久久久久久第一福利| 日韩欧美一区二区久久婷婷| 色综合久久久久综合| 日韩天堂av| 欧美黄色免费| 国产凹凸在线观看一区二区| 亚洲线精品一区二区三区| 久久久高清一区二区三区| 欧美精选一区二区| 免费亚洲婷婷| 亚洲第一在线| 91麻豆国产香蕉久久精品| 国产精品自在欧美一区| 人人超碰91尤物精品国产| 一区二区三区四区不卡在线| 国产亚洲欧美一级| 日韩精品中午字幕| 91精品国产综合久久久久久久久久| 久久国产欧美| 亚洲一区日韩| 亚洲另类自拍| 国产精品分类| 欧美va天堂| 99久久er热在这里只有精品66| 国产精品中文字幕一区二区三区| 日韩电影在线免费看| 亚洲国产日产av| 一区二区三区在线免费播放| 国产精品污网站| 久久众筹精品私拍模特| 欧美一区二区视频网站| 欧美日韩午夜在线| 欧美无砖专区一中文字| 在线区一区二视频| 色婷婷综合久久久| 色噜噜偷拍精品综合在线| 亚洲欧美高清| 国产精品一区视频网站| 亚洲国产一区二区三区在线播| 黄色成人在线网址| 亚洲婷婷免费| 亚洲无线一线二线三线区别av| 欧美午夜在线| 国产精品www994| 国内精品亚洲| 欧美日韩国产高清| 欧美日韩一区二区国产| 欧美精品一卡| 欧美极品一区二区三区| 欧美日韩免费观看一区| 国产精品二区在线观看| 激情综合电影网| 99精品热6080yy久久| 国产伦一区二区三区色一情| 麻豆av福利av久久av| 日本福利一区二区| 欧美色爱综合网| 欧美性色黄大片| 欧美影院午夜播放| 欧美日本一区二区在线观看| 欧美一区二区久久| 欧美本精品男人aⅴ天堂| 亚洲精品一区二区三区99| 久久美女艺术照精彩视频福利播放| 国产三级一区二区| 国产精品美女久久久久久久| 综合久久国产九一剧情麻豆| 亚洲自拍都市欧美小说| 婷婷国产在线综合|