2014-04-28 185 views
-1

當其方法的任何方法聲明爲abstract時,類將自動變爲抽象類。類中的抽象方法

我在某些博客中引用了這一點。有人能解釋我爲什麼當我們只使用一種抽象方法時,整個類變得抽象。

+3

你的標題暗示的東西,不存在。如果你有一個抽象方法,那麼這個類必須被聲明爲抽象的(這意味着在'class'之前使用'abstract'關鍵字)。 –

回答

2

因爲它不能直接實例化了。此外,如果您不將該類本身標記爲abstract,則會出現編譯器錯誤。

0

一旦方法是抽象的,就聲明它沒有實現。你會如何建議VM實例化該類的一個實例?

2

首先,我要猜測你提到的博客實際上是在討論C++。在Java中,在用abstract關鍵字聲明的類中聲明抽象方法是一個編譯器錯誤。隨着中說,考慮這個(錯誤)代碼:

class A 
{ 
    abstract void foo(); 
} 

A a = new A(); 
a.foo(); //Whoa! what are we supposed to do??! 

如果A已被宣佈爲抽象(如將在真正的代碼需要),這本來是不可能實例化。

如果某個類的任何部分缺失(即聲明爲抽象類),則該類必須是抽象的,因爲部分不能使用

在C++中,沒有abstract關鍵字 - 如果一個類具有任何抽象方法(在C++中稱爲純虛函數),則該類是自動抽象的。

另一方面,在Java中,如果使用關鍵字abstract聲明一個類只是抽象的。但是,如果有任何抽象方法,則需要此關鍵字,因此實際上兩個系統之間的實際差異很小。在兩種語言中,如果一個類具有任何抽象方法,則該類必須是抽象的:在C++中,這只是如何定義抽象類的;而在Java中,它是通過關鍵字abstract的機制來實現的。

+2

我在「javarevisited」博客中找到了該短語:http://javarevisited.blogspot.com/2010/10/abstraction-in-java.html。所以他們**認爲他們正在討論Java。我想這只是指出了依賴博客的危險 - 並非所有博客都值得信賴。 – ajb

+0

@ajb什麼短語?這篇博文似乎弄清了具體類和抽象類之間的區別。 –

+0

@ElliottFrisch OP帖子頂部的黑體字。是的,我認爲這篇博文能夠理解這種差異,但是這種信息是可疑的。 (還有一些評論指出了錯誤。) – ajb

0

抽象方法是爲方法定義合約但不實現該功能的方法。

要用不能滿足定義的合同的方法實例化一個類,因爲沒有實現將無法工作。因此抽象方法意味着你不應該能夠實例化類。

0

當其方法的任何方法聲明爲abstract時,類自動變爲抽象類。

有人可以解釋一下當我們使用 只有一個抽象方法時,爲什麼整個類變得抽象。

該類必須聲明爲Abstract,因爲編譯器需要一個正文類的方法,否則會拋出錯誤。因此,無論你寫的方法體或類聲明摘要

例子:

class SomeClass{ 

// Method without body 
public void SomeMethod(); 

public static void main(String[] args) { 


    } 
} 

當您嘗試編譯它,您將獲得:

SomeClass.java:4: missing method body, or declare abstract 
public void SomeMethod();