日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Design Pattern in Java[Challenge 2.1]

發布時間:2025/4/14 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Design Pattern in Java[Challenge 2.1] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

嘗試用簡單的語言,講述復雜的事情。

如發現文中的錯誤,或內容需要補充,忘不吝指教!

CHALLENGE 2.1

Write down three differences between abstract classes and interfaces?in Java.

要想回答這個問題首先要搞清楚幾個概念問題。給出了一些概念在此引用

http://blog.csdn.net/chenssy/article/details/12858267

1.抽象類是什么

一個具有abstract methods的類叫做抽象類,抽象類中可以不含有任何抽象方法,但是如果類中含有一個或多個抽象方法那么該類必須聲明為抽象類(并不強制所有方法都是abstract)。

果一個類沒有足夠的信息來描述一個具體的對象,而需要其他具體的類來支撐它,那么這樣的類我們稱它為抽象類。比如new Animal(),我們都知道這個是產生一個動物Animal對象,但是這個Animal具體長成什么樣子我們并不知道(depend on runtime info),它沒有一個具體動物的概念,所以他就是一個抽象類,需要一個具體的動物,如狗、貓來對它進行特定的描述,我們才知道它長成啥樣。

??????在面向對象領域由于抽象的概念在問題領域沒有對應的具體概念,所以用以表征抽象概念的抽象類是不能實例化的。

2.為什么會有不含有任何抽象方法的抽象類

?因為抽象類是不能實例化的,所以可以通過對類聲明abstract來阻止該類的實例化。

3.抽象類的作用

由于面向對象和運行時綁定的存在,我們無法在編譯期間確定所有生成的具體對象,即多態的概念polymorphism.我們通過建立一個basic abstract class 為所有derived class提供一些common method。以便我們可以通過這些common method來操作derived classes。用C++中的說法就是用父類的指針去操作子類instance,在Java中應該說是用父類的reference去操作子類的instance。所以抽象類的作用就是讓其他類來繼承它。

?

4.抽象類一些要求

?????? 1、抽象類不能被實例化(不能new 可以聲明reference),這是因為抽象類無法描述一個完整的instance 所以要到運行時子類來instantiate.

?????????2、抽象方法必須(Must be)由子類來進行重寫,這是因為abstract class中的abstract method都是空方法,子類不實現它就無法使用。

?????????3、只要包含一個抽象方法的抽象類,該方法必須要定義成抽象類,不管是否還包含有其他方法。

?????????4、抽象類中可以包含具體的方法,當然也可以不包含抽象方法。

?????????5、子類中的抽象方法不能與父類的抽象方法同名。

?????????6abstract不能與final并列修飾同一個類。這個很容易理解吧,abstract的意思就是讓其他類來繼承,final修飾class就是表示這個類不讓別的類繼承,同時修飾一個類就矛盾了。

?????????7、abstract 不能與privatestatic、finalnative并列修飾同一個方法。Abstract method就是留給子類實現的,要么是protected的要么是public的,否則子類得不到這個方法。Static會似的該方法靜態化,可以直接通過abstract class來調用,但是abstract方法是空的,這樣做是沒意義的。

?

4.接口的作用

Interface使得所有實現了該接口的類建立了一套協議(protocol),使得這些類有了一套相同的manipulation。此外,在java中不能multiple inheritance所以無法通過繼承抽象類來同時擁有多套common method。但是一個class可以實現多個interface,從另一個方面解決了 multiple inheritance的需求。

5..接口的一些要求

1??? Interface的方所有法訪問權限自動被聲明為public。確切的說只能為public,當然你可以顯示的聲明為protected、private,但是編譯會出錯!(interface就是強迫實現他的類完成該interface的所有方法,再去隱藏方法就沒有意義了)

接口中可以定義成員變量,或者說是不可變的常量,因為接口中的成員變量會自動變為為public static final??梢酝ㄟ^類命名直接訪問:ImplementClass.name。(因為interface并不會被實例化這些變量只是用來輔助記錄一些interface的信息,放到常量區中存放)

2??? 接口中不存在實現的方法。(前面已經介紹過了,所有方法都是空body的)

實現接口的非抽象類必須要實現該接口的所有方法。抽象類可以不用實現。(抽象類實現一個接口的目的是:讓繼承該抽象類的子類去完成所有的事情,無需在抽象類中做具體實現,這是因為可能不止一個類需要繼承這個abstract class,無法確定interface中的方法到底應該是怎么樣實現的)

3)不能使用new操作符實例化一個接口,但可以聲明一個接口變量,該變量必須引用(refer to)一個實現該接口的類的對象(類似多態的感覺 Interface referece A = new Obj_Implemented)??梢允褂?/span> instanceof 檢查一個對象是否實現了某個特定的接口。例如:if(anObject instanceof Comparable){}。

在實現多接口的時候一定要避免方法名的重復。

?

現在回到Design Pattern Challenge

InterfaceAbstract class 的異同

  • 一個類可以實現多個interface,但是最多只能繼承一個Abstract class
  • Abstract class 可以含有具體的(implemented的方法),而Interface中的全是空body的方法
  • Abstract class可以使用成員變量,而Interface的成員變量都只能是static final
  • Abstract class可以通過 publicprotectedprivate來修飾那些具體的方法,但是不能用private或者staticnative等去修飾抽象的方法。而Interface中的方法都只能是public的,如圖所示
  • Abtract class可以定義constructorInterface不行
  • ?

    abstract class C {public void method(){};private void pri_method(){};void pack_method(){};abstract public void ab_pub_method();abstract protected void ab_pro_method();abstract private void ab_pri_method();//error}

    ?

    interface A {protected void A();//errorabstract void B(); }

    ?

    ?

    ?
    ?
    ?

    總結

    以上是生活随笔為你收集整理的Design Pattern in Java[Challenge 2.1]的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。