两个Java函数声明之间的区别

时间:2012-07-13 17:43:55

标签: java abstract function-declaration

当我遇到两个返回对抽象类的引用的函数声明时,我正在阅读Hadoop文档:

public FSDataInputStream open(Path f) throws IOException
public abstract FSDataInputStream open(Path f, int bufferSize) throws IOException

除了参数的不同之外,为什么这两个函数有不同的返回类型,一个明确声明abstract而另一个没有?

感谢。

7 个答案:

答案 0 :(得分:6)

声明了抽象方法但没有实现。子类被迫实现它们,并且不能继承它们,因为它们没有在超类中实现。

答案 1 :(得分:6)

要回答原始问题,abstract不是返回类型的一部分,它是方法本身的修饰符,就像public一样。这两种方法的返回类型是相同的。

答案 2 :(得分:5)

定义public abstract FSDataInputStream open(Path f, int bufferSize) throws IOException的类本身就是抽象的。这意味着该类刚刚提供了方法的声明而不是实现。

另一个可以是以下任何一个:

  • 如果在界面中删除,则表明该方法也是一个抽象声明。

  • 否则,它可能是具体类的一部分,表明它在那里有实现。

答案 3 :(得分:3)

必须实现抽象方法。目前尚不清楚为什么在这种情况下不知道子类是什么,但是如果你要继承它所在的类/接口,你必须实现第二种方法,而你可以立即使用第一种方法。

答案 4 :(得分:3)

评估documentation

  

抽象方法是一种没有声明的方法   实现(没有大括号,后跟分号),就像   这样:

abstract void moveTo(double deltaX, double deltaY);
 If a class includes abstract methods, the class itself must be declared abstract, as in:

public abstract class GraphicObject {
   // declare fields
   // declare non-abstract methods
   abstract void draw();
}
     

当抽象类被子类化时,子类通常提供   其父类中所有抽象方法的实现。   但是,如果没有,则子类也必须声明为abstract。

答案 5 :(得分:2)

public abstract FSDataInputStream open(Path f, int bufferSize) throws IOException

这并不意味着我们正在返回一个抽象类,但我们正在声明一个方法,但我们还没有给出它的实现,它们是关键字abstract
这是在abstract课程中完成的。所以另一个类将extend抽象类并给出它的实现。

public FSDataInputStream open(Path f, int bufferSize) throws IOException

告诉我们我们现在正在实施抽象方法。

答案 6 :(得分:2)

1。 public abstract FSDataInputStream open(Path f, int bufferSize) throws IOException,表示此方法是一种抽象方法,因此它只是一个声明而非实现。因此,此方法可以是接口中的方法,也可以是抽象类中的方法。所以此方法必须由实现接口的第一个Concrete子类实现,或者扩展包含此方法的类。

2。 public FSDataInputStream open(Path f) throws IOException,此方法如果在界面内声明,则为抽象方法否则为非抽象方法在抽象或非抽象类中。