当我遇到两个返回对抽象类的引用的函数声明时,我正在阅读Hadoop文档:
public FSDataInputStream open(Path f) throws IOException
public abstract FSDataInputStream open(Path f, int bufferSize) throws IOException
除了参数的不同之外,为什么这两个函数有不同的返回类型,一个明确声明abstract
而另一个没有?
感谢。
答案 0 :(得分:6)
声明了抽象方法但没有实现。子类被迫实现它们,并且不能继承它们,因为它们没有在超类中实现。
答案 1 :(得分:6)
要回答原始问题,abstract
不是返回类型的一部分,它是方法本身的修饰符,就像public
一样。这两种方法的返回类型是相同的。
答案 2 :(得分:5)
定义public abstract FSDataInputStream open(Path f, int bufferSize) throws IOException
的类本身就是抽象的。这意味着该类刚刚提供了方法的声明而不是实现。
另一个可以是以下任何一个:
如果在界面中删除,则表明该方法也是一个抽象声明。
否则,它可能是具体类的一部分,表明它在那里有实现。
答案 3 :(得分:3)
必须实现抽象方法。目前尚不清楚为什么在这种情况下不知道子类是什么,但是如果你要继承它所在的类/接口,你必须实现第二种方法,而你可以立即使用第一种方法。
答案 4 :(得分:3)
抽象方法是一种没有声明的方法 实现(没有大括号,后跟分号),就像 这样:
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
,此方法如果在界面内声明,则为抽象方法,否则为非抽象方法在抽象或非抽象类中。