类中的抽象方法

时间:2014-04-28 18:27:09

标签: java oop abstract

当一个类的任何方法声明为abstract时,它自动成为抽象类。

我在一些博客中提到了这一点。有人可以解释一下当我们只使用一种抽象方法时,为什么整个类都变成抽象的。?

5 个答案:

答案 0 :(得分:2)

因为它不能再直接实例化了。此外,如果您不将类本身标记为abstract,则编译错误。

答案 1 :(得分:2)

首先,我猜你提到的博客实际上是在讨论C ++。在Java中,在使用abstract关键字声明的类中声明抽象方法是一个编译器错误。话虽如此,请考虑这个(错误的)代码:

class A
{
    abstract void foo();
}

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

如果A被声明为抽象(正如实际代码中所要求的那样),那么实例化它是不可能的。

如果缺少某个类的任何部分(即,它被声明为abstract),则该类必须是抽象的,因为部分不能使用

在C ++中,没有abstract关键字 - 如果一个类有任何抽象方法(在C ++中称为纯虚函数),它就会自动抽象。

另一方面,在Java中,如果使用abstract关键字声明类,则该类只是抽象的。但是,如果有任何抽象方法,则需要此关键字,因此实际上两个系统之间的实际差异非常小。在这两种语言中,如果一个类有任何抽象方法,那么它必须是抽象的:在C ++中,这只是抽象类的定义方式,而在Java中,它是通过abstract关键字的机制来实现的。

答案 2 :(得分:0)

一旦方法是抽象的,就声明它没有实现。您如何建议VM实例化该类的实例?

答案 3 :(得分:0)

抽象方法是定义方法的契约但不实现功能的方法。

要使用无法满足合同定义的方法来实例化类,因为没有实现也不会起作用。因此,抽象方法意味着您不能实例化该类。

答案 4 :(得分:0)

  

当一个类的任何方法声明为abstract时,它自动成为抽象类。

     

有人可以解释我为什么整个班级在我们使用时变得抽象   只有一种抽象方法。?

该类必须被声明为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();