java abstract
參考
java抽象類和抽象方法
Android開發:抽象類(abstract class)和介面(Interface)的區別
Java基礎篇(一):介面與抽象類
java抽象類和介面的區別,使用場景
如果我們進行一個圖形編輯軟體的開發,就會發現問題領域存在著圓、三角形這樣一些具體概念,它們是不同的,但是它們本質上又都屬於這樣一個概念:形狀,形狀這個概念在問題領域是不存在的,所以形狀就是一個圓形、三角形的抽象類。正是因為抽象的概念在問題領域沒有對應的具體概念,所以用以表徵抽象概念的抽象類是不能例項化的。
你可以直接使用普通類來實現同樣的邏輯,但是,讓具體的實現方法和類抽象化,你可以清晰的告訴使用者這個類不能直接使用,它應該作為基類,然後讓子類來實現抽象方法。(模板方法設計模式)
抽象類有點類似“模板”的作用,目的是根據其格式來建立和修改新的類。物件不能由 抽象類直接建立,只可以通過抽象類派生出新的子類,再由其子類來建立物件。當一個類被宣告為抽象類時,要在這個類前面加上修飾符abstract。
在抽象類中的成員方法可以包括一般方法和抽象方法。抽象方法就是以abstract修飾的方法,這種方法只宣告返回的資料型別、方法名稱和所需的引數,沒 有方法體,也就是說抽象方法只需要宣告而不需要實現。當一個方法為抽象方法時,意味著這個方法必須被子類的方法所重寫,否則其子類的該方法仍然是 abstract的,而這個子類也必須是抽象的,即宣告為abstract。
abstract class Animal//定義抽象類
{
String str;
Animal(String s)//定義抽象類的一般方法
{
str=s;
}
abstract void eat();//定義抽象方法
}
class Horse extends Animal//定義繼承Animal的子類
{
String str;
Horse(String s)
{
super(s);//呼叫父類的構造方法
}
void eat()//重寫父類的抽象方法
{
System.out.println("馬吃草料!");
}
}
抽象類方式中,抽象類可以擁有任意範圍的成員資料,同時也可以擁有自己的非抽象方法,但是介面方式中,它僅能夠有靜態、不能修改的成員資料(即final static,但是我們一般是不會在介面中使用成員資料),同時它所有的方法都必須是抽象的。在某種程度上來說,介面是抽象類的特殊化。
從設計的層面來看,我覺得抽象類與介面有如下幾個不同點:
- 抽象層次不同。可以這樣理解,抽象類是對類的抽象,介面是對行為的抽象。抽象類對是類整體進行抽象,包括屬性、行為,而介面是對類區域性(行為)進行抽象。
- 跨域不同。抽象類所跨域的是具有相似特點的類,而介面可以跨域不同的類。抽象類所體現的是一種繼承關係,要想使得繼承關係合理,父類和派生類之間必須存在"is-a" 關係,即父類和派生類在概念本質上應該是相同的。對於介面則不然,並不要求介面的實現者和介面定義在概念本質上是一致的, 僅僅是實現了介面定義的契約而已。
相關文章
- java基礎:abstractJava
- JAVA 中interface 和 abstract 區別Java
- java中的抽象類abstract怎麼使用?Java抽象
- c# abstractC#
- Java關鍵字之abstract(抽象類的概念和使用)Java抽象
- JAVA設計模式之 抽象工廠模式【Abstract Factory Pattern】Java設計模式抽象
- java關鍵字詳解(abstract.double.int.switch) (轉)Java
- [JAVA] Java物件導向之final、abstract抽象、和變數生命週期Java物件抽象變數
- TypeScript abstract 抽象類TypeScript抽象
- abstract類和介面
- Scala的Abstract Types
- Abstract Factory + Template = BuilderUI
- 介面和抽象類 (abstract)抽象
- C# interface abstract classC#
- abstract 的 interface ,如何理解?
- C#基礎——abstractC#
- 【譯】WebSocket協議——摘要(Abstract)Web協議
- 【Basic Abstract Algebra】Exercises of Section 1.1
- 【Basic Abstract Algebra】Exercises for Section 1.2
- Typescript的interface、class和abstract classTypeScript
- 抽象語法樹 Abstract syntax tree抽象語法樹
- C#之Abstract、Vitrual、OverrideC#IDE
- Delphi設計模式-Abstract Factory (轉)設計模式
- CNN (Convolutional Neural Networks) AbstractCNN
- JAVA中Abstract到底有什麼用?都用在哪些方面比較合適?Java
- Abstract Factory(抽象工廠)——物件建立型模式抽象物件模式
- Abstract Syntax Tree 抽象語法樹簡介抽象語法樹
- PHP abstract與interface之間的區別PHP
- C# [method Modifiers] abstract virtual override newC#IDE
- virtual abstract override new 幾點學習IDE
- 設計模式討論之abstract factory篇設計模式
- HITSC_6_Abstract Data Type (ADT)
- PHP中的 抽象類(abstract class)和 介面(interface)PHP抽象
- 奇幻RPG(人物構建 與 Abstract Factory模式)模式
- 設計模式--抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- C++中的抽象基類(Abstract Base Class)C++抽象
- Abstract Pack Mac(彩色卡通元素效果fcpx外掛)Mac
- PHP 中的抽象類(abstract class)和介面(interface)PHP抽象