av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java中沒(méi)有抽象方法的抽象類(lèi)有什么意義??jī)H僅是為了讓別人不能創(chuàng)建該類(lèi)的對(duì)象?

瀏覽:179日期:2024-02-15 14:36:02

問(wèn)題描述

問(wèn)題解答

回答1:

最常用到的地方就是實(shí)現(xiàn)模板方法(Template Method)?舉個(gè)例子,你要寫(xiě)一批遠(yuǎn)程服務(wù)的本地代理。對(duì)于這批代理來(lái)說(shuō),獲取請(qǐng)求地址、發(fā)送請(qǐng)求、獲取相應(yīng)內(nèi)容的步驟都是公共的。只有定義字符編碼類(lèi)型、定義響應(yīng)回調(diào)兩個(gè)步驟是差異的。

這時(shí)候就可以定義一個(gè)抽象類(lèi),把請(qǐng)求過(guò)程都寫(xiě)完。而將差異的部分留給實(shí)際的子類(lèi)去定義。不是設(shè)計(jì)者【不讓】抽象類(lèi)實(shí)例化,而是在知道遠(yuǎn)程服務(wù)的特性前無(wú)法確定一些屬性,從而不可能實(shí)例化。

JDK中的例子就是 java.io.InputStream。它的 read(byte[], int, int) 方法調(diào)用了 java.io.InputStream.read() 方法。而read()是一個(gè)抽象方法,需要在子類(lèi)中定義。你可以看源碼學(xué)習(xí)一下。

public abstract int read() throws IOException; public int read(byte b[], int off, int len) throws IOException { if (b == null) {throw new NullPointerException(); } else if (off < 0 || len < 0 || len > b.length - off) {throw new IndexOutOfBoundsException(); } else if (len == 0) {return 0; } int c = read(); if (c == -1) {return -1; } b[off] = (byte)c; int i = 1; try {for (; i < len ; i++) { c = read(); if (c == -1) {break; } b[off + i] = (byte)c;} } catch (IOException ee) { } return i;}回答2:

你得看看它是否繼承了什么類(lèi)或者實(shí)現(xiàn)了什么接口

很有可能放置了一些共用方法

如果沒(méi)有,不如改成接口

回答3:

可能提取了一些公共方法和實(shí)例字段。

回答4:

應(yīng)該不是說(shuō)沒(méi)有抽象方法的抽象類(lèi)有特殊的意義,只是抽象類(lèi)的普通意義,給出默認(rèn)實(shí)現(xiàn),比直接實(shí)現(xiàn)接口可能會(huì)少些部分代碼。反過(guò)來(lái)說(shuō),硬是要求一個(gè)抽象類(lèi)保留一個(gè)兩個(gè)抽象方法有什么意義?

回答5:

說(shuō)反了,是為了讓這個(gè)類(lèi)的子類(lèi)必須創(chuàng)建這個(gè)某些方法。當(dāng)然這也是接口的要求,但是接口要求所有方法都是抽象方法。但是抽象類(lèi)可以預(yù)先定義一些不需要子類(lèi)必須重載的方法。

抽象類(lèi)和接口都是為了抽象,抽象的好處就不說(shuō)了。比如我們要實(shí)現(xiàn)一個(gè)Equal接口或是類(lèi),定義兩個(gè)方法 equal 和 unequal。如果用接口實(shí)現(xiàn),一個(gè)類(lèi)必須實(shí)現(xiàn)這兩個(gè)方法。可是如果用抽象類(lèi)實(shí)現(xiàn),可以把unequal在抽象類(lèi)里實(shí)現(xiàn)為!equal,這樣在其子類(lèi)里就需要再實(shí)現(xiàn)unequal了。

個(gè)人來(lái)說(shuō)更喜歡抽象類(lèi)一點(diǎn)兒(可是Java不支持多繼承)。比如Compareable接口其實(shí)還有一個(gè)要求,如果a<b && b < c 則 a < c,接口里不能保證這是正確的。當(dāng)然抽象類(lèi)也解決不了,但是對(duì)于上面的Equal,抽象類(lèi)實(shí)現(xiàn)起來(lái)更符合額外的要求。

回答6:

例子:基于:spring mvc

public abstract class BaseController { protected HttpServletRequest request; protected HttpServletResponse response; protected HttpSession session; @ModelAttribute public void setReqAndResp(HttpServletRequest request, HttpServletResponse response){this.request = request;this.response = response;this.session = request.getSession(); } protected Map<String,String> getLoginUser(){Object loginUser = request.getAttribute(Config.LOGIN_USER);Map<String,String> loginUserMap = new HashMap<>();loginUserMap.put(Config.USER_CODE,loginUser==null?'':loginUser.toString());return loginUserMap; //return (User) session.getAttribute(Constants.LOGIN_USER); }}

通用的全局屬性 request response session 通用的方法getLoginUser() 當(dāng)然 還會(huì)有其它的(一些通用的屬性和方法)。 既然有controller 那么service dao 也可以。我一般都 是把一些重置的代碼 抽到父類(lèi)里 使用。

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 免费看国产一级特黄aaaa大片 | 国产免费福利小视频 | 91资源在线 | 国产成人精品a视频一区www | 九九九视频 | 欧美日韩一区二区在线 | 亚洲精品久久 | 91免费视频 | 久久久久久亚洲 | 91资源在线 | 久久精品青青大伊人av | 91色网站 | 久久精品色欧美aⅴ一区二区 | 免费一级欧美在线观看视频 | 国产专区免费 | 精品久久久久久中文字幕 | 精品一区二区三区在线视频 | 亚洲综合小视频 | 国产精品久久久久aaaa九色 | 中文字幕亚洲欧美日韩在线不卡 | 久久免费精品 | 一区二区三区精品视频 | 色妹子综合网 | 色网站在线 | www.天天操| 91精品国产色综合久久不卡98 | 99精品欧美一区二区三区综合在线 | 欧美成人精品一区二区男人看 | 天天操天天操 | 狠狠操天天操 | 中文字幕av亚洲精品一部二部 | 爱爱免费视频 | 欧美精品在线观看 | 亚洲网站在线播放 | 天天躁日日躁狠狠躁2018小说 | 91午夜在线 | 一级特黄色毛片 | 久久九七 | 国产精品久久久久久久7电影 | 美女日批免费视频 | 久久久www成人免费精品张筱雨 |