国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java小專題之抽象類和接口

2019-11-06 06:32:58
字體:
來源:轉載
供稿:網友

一.抽象類


1. 抽象類的來源

java是面向對象的語言。在面向對象的概念中,一切事物都是對象,所有的對象都是用類來描述的。事物有個性和共性。描述事物抽取出來的共性的類就是抽象類

事物(對象) 事物的個性 事物的共性
類(屬性+方法) 一般類 抽象類
舉例 蘋果 水果

2.抽象類的特征

抽象類不能實例化。也就是不能創(chuàng)建對象,應該由繼承抽象類的子類來進行實例化。抽象類就是為了繼承而存在的,天生就是為了當爹。基于這個原因,abstract不能和final并列修飾一個類。 final修飾的類不能被繼承。子類無法繼承抽象類進行實例化。抽象類的抽象方法必須由繼承它的子類重寫。如果繼承它的子類沒有重寫抽象類的抽象方法,那么這個子類也一定是抽象類,因為它含有抽象方法。基于這個原因,抽象方法必須是public和PRotected修飾的,缺省訪問權限修飾符情況下, 默認為public。因為abstract不能和private,static,final或native并列修飾抽象方法。原因是 private修飾的方法不能被子類繼承。子類不能重寫這個方法。static修飾的方法叫類方法(靜態(tài)方法)。子類不必重寫這個方法。final修飾的方法可以被繼承不能被重寫。子類不能重寫這個方法。含有抽象方法的類必然是抽象類。抽象類可以沒有抽象方法。子類的抽象方法不能和父類的抽象方法同名。抽象類可以有成員變量, 一般方法, 構造方法,與普通類一樣。

3.抽象類的示例代碼

public abstract Person{ //屬性 String name; //構造方法 public Person(){ this.name=name; } //一般方法 public void displayName(){ System.out.println("名字是:"+name); } //抽象方法 public abstract void eat(); }

二.接口

1.接口的來源

接口是比抽象類還要抽象。接口是抽象類的延伸。Java為了保證數據安全,一個類不能繼承多個類。但是Java使用接口彌補了不能多繼承的缺陷。一個類可以實現(xiàn)多個接口,這叫“多實現(xiàn)”。接口和繼承共同使用,既能保證數據安全,又可以實現(xiàn)多繼承。接口與接口之間是可以多繼承的。//接口繼承(inheritance)interface A{ void method1(); void method2();}interface B{ void method3;}interface C extends A,B{ void method4();}

2.接口的特征

接口不能實例化。不能使用new操作符實例化一個接口,但是可以聲明一個接口變量,該變量必須引用(refer to)一個實現(xiàn)該接口的類的對象。可以使用 instanceof 檢查一個對象是否實現(xiàn)了某個特定的接口。例如:if(Object instanceof Interface){}。 實現(xiàn)接口的非抽象類必須要實現(xiàn)接口中的所有方法。實現(xiàn)接口的抽象類不必實現(xiàn)接口中的所有方法。接口中的變量。接口中的變量會被隱式地指定為public static final修飾,使用其他修飾符修飾編譯會報錯。一般情況下不在接口中定義變量,而是不可變的常量。接口中的方法。接口中的方法會被隱式地指定為public abstract修飾,使用其他修飾符修飾編譯會報錯。接口中不存在具體實現(xiàn)的方法,接口中的方法都是抽象方法。

3.接口的示例代碼

public interface Demo{ public static final A; public abstract void method1(); public abstract void method2();}

三.抽象類和接口的深度剖析

在Java語言中, 抽象類和接口是支持抽象定義的兩種機制。正是由于這兩種機制的存在,才賦予了Java強大的 面向對象能力。抽象類和接口之間在對于抽象定義的支持方面具有很大的相似性,甚至可以相互替換。

1.語法層次的不同 參考一,二部分。


2.抽象層次的區(qū)別 抽象類是對一類事物的抽象。接口是對行為的抽象。 抽象類是對整個類整體的屬性,行為進行抽象。 接口是對類局部行為進行抽象。 舉例說明: 飛機和鳥是不同的事物,它們擁有共同的行為,會飛。 可以將飛機設計一個類,鳥設計一個類,因為兩者都是事物。 但是飛行是個行為特性,不能設計一個類,應該設計成一個接口。


3.描述層次的區(qū)別 我們日常生活中可以看到各種”接口”,例如電源插座。制造電源插座的廠商和制造電器的廠兩者之間約定了一個生產規(guī)則,約定了一個”接口”之后,不同的電器就都能使用電源插座。 由此可知,接口的本質是協(xié)議,是對事物之間規(guī)則的描述,不是對事物的描述。 在Java中: 1.抽象類也是類,類是對現(xiàn)實事物的描述。 2.接口不是類,接口是用來建立類與類之間的協(xié)議。接口是對事物之間規(guī)則,行為的描述。


4.設計層次的不同 1.抽象類的設計理念是“is-a”,接口的設計理念是“l(fā)ike-a”,是問題領域不同。 2.抽象類的設計目的是為了提高代碼的復用性。是模板式設計。接口的設計目的是為了實現(xiàn)”設計與實現(xiàn)的分離”,降低程序中的耦合性。是輻射式設計。 3.在“缺省適配模式”中,聲明類型的工作由Java接口承擔。但是同時給出一個Java抽象類,且實現(xiàn)了這個接口。而其他同屬于這個抽象類型的具體類可以選擇實現(xiàn)這個Java接口,也可以選擇繼承這個抽象類。也就是說,在層次結構中,Java接口在最上面,然后緊跟著抽象類,然后是普通類。 4.在面向對象程序設計中,對于接口,有一個核心原則就是Interface Segregation Principle(接口隔離原則): 1)使用多個專門的接口比使用單一的總接口要好。2) 一個類對另外一個類的依賴性應當是建立在最小的接口上的。3)一個接口代表一個角色,不應當將不同的角色都交給一個接口。沒有關系的接口合并在一起,形成一個臃腫的大接口,這是對角色和接口的污染。


簡化總結

抽象類 接口
不是類
對事物描述 對事物之間規(guī)則描述
對類整體抽象 對類局部行為抽象
模板式設計 輻射式設計
is-a理念 like-a理念
目的是提高復用性 目的是降低耦合性
為繼承而生 為多態(tài)而生

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 民勤县| 剑阁县| 河曲县| 荣成市| 绥滨县| 玉林市| 周口市| 万全县| 资中县| 临澧县| 涿鹿县| 建昌县| 内黄县| 辽宁省| 仪征市| 广丰县| 绵阳市| 上高县| 广德县| 榕江县| 新蔡县| 集贤县| 岚皋县| 红安县| 义马市| 天津市| 屏山县| 鄂伦春自治旗| 夹江县| 博湖县| 徐州市| 林周县| 嘉鱼县| 南城县| 台前县| 华池县| 蕲春县| 资源县| 基隆市| 浦北县| 九龙县|