2014-04-28 150 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();