2015-09-06 56 views
1

假設一個抽象類擁有所有三種方法,並且都是具體方法,與具有所有具體方法的普通類相比這三種方法也是具體的。具有所有具體方法的普通類和具有所有具體方法的抽象類有什麼區別

它們在應用程序中有什麼區別,因爲它們現在基本上服務於相同的目的。爲什麼這是允許的?

以一個抽象類,讓我們說:

abstract class A { 
    public void open() {} 
    public void close() {} 
    public void pull() {} 
} 

和正常類:

class A { 
    public void open() {} 
    public void close() {} 
    public void pull() {} 
} 

什麼是它們之間的區別,因爲如果我們去掉abstract關鍵字則都是相同的。

任何人都可以解釋它嗎?

+4

主要區別在於抽象類不能被實例化。如果沒有抽象成員,那是唯一的(重要的)區別。另外,抽象類不能被聲明爲final。 –

+0

您無法初始化「抽象」類。在你的情況下,抽象類的意義就失去了。 – Andrew

+1

你的問題和這個不一樣嗎? https://stackoverflow.com/questions/362446/abstract-class-with-all-concrete-methods?rq=1 –

回答

1

你不能實例化一個抽象類。一個區別是你如何實例化它們:

A a = new A(); // for normal class 
A a = new A(){}; // for abstract class with no abstract with no abstract memebers 

第二行創建A的annonynous sublass

1

一個具體的類可以被實例化的實例,而是一個抽象類不能不管什麼。編譯器不關心類是否具有抽象成員。一個抽象類不能被實例化!當你用一個匿名的內部類實例化一個沒有抽象成員的抽象類時,你不需要花括號中的任何東西。那是因爲所有的方法都實施了。我想這是另一個區別。

0

雖然@Bohemian是正確的,一個abstract類也,當extend版,在abstract類內的所有abstract方法都必須落實到這是extend荷蘭國際集團我們abstract類的類。例如,這不起作用。

MyClass的

public class MyClass extends AbstractClass { 

} 

抽象類

public abstract class AbstractClass { 
    public abstract void test(); 
} 

MyClass必須包含AbstractClass類的所有方法。此外,所有abstract方法不能有一個正文。

+2

我不認爲OP在問你這個問題。他/她詢問具有所有具體方法的普通班級和具有所有具體方法的抽象班級之間的區別** – Sweeper

相關問題