abstract class 和 interface 區別

本文出自與:heipai:tsg666

含有 abstract 修飾符的 class 即為抽象類,abstract 類不能創建的實例對象。含有 abstract 方法的類必須定義為 abstract class,abstract class 類中的方法不必是抽象的。abstract class 類中定義抽象方法必須在具體 (Concrete) 子類中實現,所以,不能有抽象構造方法或抽象靜態方法。如果的子類沒有實現抽象父類中的所有抽象方法,那么子類也必須定義為 abstract 類型。

接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認為 public abstract 類型,接口中的成員變量類型默認為 public static final。

兩者的語法區別:

1.抽象類可以有構造方法,接口中不能有構造方法。2.抽象類中可以有普通成員變量,接口中沒有普通成員變量3.抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。4.抽象類中的抽象方法的訪問類型可以是public,protected和(默認類型,雖然eclipse下不報錯,但應該也不行),但接口中的抽象方法只能是public類型的,并且默認即為public abstract類型。5.抽象類中可以包含靜態方法,接口中不能包含靜態方法6.抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,并且默認即為public static final類型。7. 一個類可以實現多個接口,但只能繼承一個抽象類。

兩者應用上的區別:

接口更多的是在系統架構設計方法發揮作用,主要用于定義模塊之間的通信契約。而抽象類在代碼實現方面發揮作用,可以實現代碼的重用,例如,模板方法設計模式是抽象類的一個典型應用,假設某個項目的所有 Servlet 類都要用相同的方式進行權限判斷、記錄訪問日志和處理異常,那么就可以定義一個抽象的基類,讓所有的 Servlet 都繼承這個抽象基類,在抽象基類的 service 方法中完成權限判斷、記錄訪問日志和處理異常的代碼,在各個子類中只是完成各自的業務邏輯代碼,偽代碼如下:

  1 public abstract class BaseServlet extends HttpServlet{
  2 
  3    public final void service(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException {
  4 
  5       記錄訪問日志
  6 
  7       進行權限判斷
  8 
  9       if(具有權限){
 10 
 11         try{
 12 
 13           doService(request,response);
 14 
 15         }catch(Excetpion e) {
 16 
 17            記錄異常信息
 18 
 19         }
 20 
 21       }
 22 
 23    }
 24 
 25    protected abstract void doService(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException{
 26 
 27     //注意訪問權限定義成protected,顯得既專業,又嚴謹,因為它是專門給子類用的
 28 
 29     }
 30 }
  1 public class MyServlet1 extends BaseServlet{
  2 
  3   protected void doService(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException{
  4 
  5    本Servlet只處理的具體業務邏輯代碼
  6 
  7   }
  8 
  9 }

父類方法中間的某段代碼不確定,留給子類干,就用模板方法設計模式。

備注:這道題的思路是先從總體解釋抽象類和接口的基本概念,然后再比較兩者的語法細節,最后再說兩者的應用區別。

比較兩者語法細節區別的條理是:

?????? 先從一個類中的構造方法、普通成員變量和方法(包括抽象方法),靜態變量和方法,繼承性等

????? 6 個方面逐一去比較回答,接著從第三者繼承的角度的回答,

???? 特別是最后用了一個典型的例子來展現自己深厚的技術功底。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257533.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257533.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257533.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Factorial Trailing Zeroes

https://leetcode.com/problems/factorial-trailing-zeroes/ Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in logarithmic time complexity. 解題思路: 再次遇見最討厭的Math題。 開始的思路,結尾的…

java設計模式懶漢_java設計模式-懶漢設計模式

一、理論類加載時,不進行實例化,調用時才進行類的實例化。二、代碼實現public class LazyManPattern {//1.構造方法私有化private LazyManPattern(){}//2.類加載時,不進行實例化private static LazyManPattern lazyManPattern;//3.創建實例化…

多視圖參數傳遞

在iOS開發中常用的參數傳遞有以下幾種方法: 采用代理模式 采用iOS消息機制 通過NSDefault存儲(或者文件、數據庫存儲等) 通過AppDelegate定義全局變量(或者使用UIApplication、定義一個單例類等) 通過控制器屬性傳遞轉…

百年難得一見!阿里園區驚現雙月爭輝奇觀!

9月3日晚杭州阿里園區上空突然驚現“雙月爭輝”奇觀,引發路人、員工爭相拍照留念狂潮。記者隨后深入園區探訪,近距離觀察“雙月奇觀”。當晚,熱心觀眾王先生提供線索。王先生路過杭州阿里巴巴園區時,聽到有人呼喊:“快…

Math源碼java_深入學習java源碼之Math.sin()與 Math.sqrt()

深入學習java源碼之Math.sin()與 Math.sqrt()native關鍵字凡是一種語言,都希望是純。比如解決某一個方案都喜歡就單單這個語言來寫即可。Java平臺有個用戶和本地C代碼進行互操作的API,稱為JNInative關鍵字告訴編譯器(其實是JVM)調用的是該方法在外部定義…

路由控制器Express的路由控制方法

MVC中的C控制器 express的路由控制方法:1.創建路由規則 var express require(‘express’); var router express.Router(); /* get home page.*/ router.get(/, function(req,res){ res.render(index, title:express); }); module.exports router; 服務器在開始…

URAL 1146 Maximum Sum(最大子矩陣的和 DP)

Maximum Sum 大意:給你一個n*n的矩陣,求最大的子矩陣的和是多少。 思路:最開始我想的是預處理矩陣,遍歷子矩陣的端點,發現復雜度是O(n^4)。就不知道該怎么辦了。問了一下,是壓縮矩陣,轉換成最大…

基于 axios 的 Vue 項目 http 請求優化

對于需要大量使用 http 請求的項目,我們通常會選擇對 http 請求的方法進行二次封裝,以便增加統一的攔截器,或者統一處理阻止重復提交之類的邏輯。Vue.js 的項目中我們選擇使用了 axios 這樣一個 http 庫,下面也就簡述下基于 axios…

Spring 事務配置5種方式

Spring配置文件中關于事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。 DataSource、TransactionManager這兩部分只是會根據數據訪問方式有所變化&…

java中主線程首先執行_java經典面試題:子線程先運行30次主線程,主線程40次,如此循環50次?...

最近偶遇這道題,網上相似的題都是循環次數不一樣。然而我百度搜到的論壇或者博客感覺都不太對,運行有穿插。請給出正確結果。我們假使所有人都引入了業務對象。并且我有疑問?感覺題目本意不是new Thread()放在前面。網上有人做法是用標志位防…

[翻譯]Feedback on the Go Challenge solutions

第一次Go Challenge比賽,中國區只有3人參賽。 賽后收到郵件,是一個審閱者的反饋,“Feedback on the Go Challenge solutions”,摘錄如下: 保持簡單粗暴 一個語義單元一個文件即可,不要像Java那樣一個文件就…

黑客宣稱掌握了600多萬個Instagram賬號的信息

據外媒報道,上周早些時候,歌手兼演員賽琳娜戈麥斯因Instagram賬號被盜而發出大量來自前男友賈斯汀比伯的裸照。不過當時很快賽琳娜就拿回了對賬號的控制權并刪掉了這些裸照。就在大家以為這件事情已經平息的時候,Instagram卻被曝光了一個極為…

java apache.poi_Java Apache POI

我正在努力從excel文檔中讀取數據,該文檔每兩周更新一次,大約有50,000行數據,在開始新工作表之前可能會達到大約120,000.我正在使用Apache POI來獲取數據.我在下面得到了這個例外,但我認為最重要的一個例外是引起:java.lang.OutOfMemoryError:Java堆空間…

Hibernate逍遙游記-第2章-使用hibernate.properties

1. 1 package mypack;2 3 import org.hibernate.*;4 import org.hibernate.cfg.Configuration;5 import java.util.*;6 7 public class BusinessService{8 public static SessionFactory sessionFactory;9 10 /** 初始化Hibernate,創建SessionFactory實例 */1…

奇怪吸引子---Aizawa

奇怪吸引子是混沌學的重要組成理論,用于演化過程的終極狀態,具有如下特征:終極性、穩定性、吸引性。吸引子是一個數學概念,描寫運動的收斂類型。它是指這樣的一個集合,當時間趨于無窮大時,在任何一個有界集…

C#打印圖片

打印的原理是:生成mdi文件,系統碰到mdi的時候會自動以打印的方式處理。所以,不管用什么模板,什么方式;能在PrintPage事件處理中,生成一張要打印內容的圖片就OK了! C#實現打印源碼如下: #region 打印 …

mysql 里面不等于符號_mysql 不等于 符號寫法

經過測試發現mysql中用<>與!都是可以的&#xff0c;但sqlserver中不識別!,所以建議用<>selece * from jb51 where id<>45sql 里 符號<> 于 ! 的區別<> 與!都是不等于的意思&#xff0c;但是一般都是用<>來代碼不等于因為<>在任何SQL…

Delphi通過ICMP檢測與遠程主機連接

{ ping IP 地址&#xff08;返回false or true&#xff09; 2015-03-23} function PingHost(HostIP: String): Boolean; typePIPOptionInformation ^TIPOptionInformation;TIPOptionInformation packed recordTTL:Byte;TOS:Byte;Flags:Byte;OptionsSize:Byte;OptionsData:PC…

安裝SQL2012出現[HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)設置為 1

本人安裝SQL2012出現這個錯誤&#xff0c;找了三天三夜&#xff0c;終于把問題找出來&#xff0c;共享給有需要的人們&#xff0c;不用重新換系統 錯誤如下: 1&#xff0c;此問題是系統.net Framework版本沖突&#xff0c;首先下載.net Framework清理工具&#xff08;如:cleanu…

Java學習筆記之equals和Objects.equals

equals 相信大家就知道&#xff0c;就是比較&#xff0c;我們平時也會在自己定義的類中加入自己重寫的equals用來比較兩個類是否相同&#xff0c;例如這樣 public class Person {private String name; //姓名private int age; //年齡private String nickName; //昵稱public Per…