Java 扩展抽象类的奇怪行为(练习)
我正在学习JavaSE7认证考试,我正在做一些关于继承和访问修饰符的枯燥练习 但是现在我得到了一个应用继承的意外行为。在我的基本包Java 扩展抽象类的奇怪行为(练习),java,eclipse,oop,inheritance,javac,Java,Eclipse,Oop,Inheritance,Javac,我正在学习JavaSE7认证考试,我正在做一些关于继承和访问修饰符的枯燥练习 但是现在我得到了一个应用继承的意外行为。在我的基本包com.testpkg中,我有一个抽象类: package com.testpkg; public abstract class Abstract { public int test(); } 注意我自愿省略了test()方法的abstract修饰符 然后我在packagecom.testpkg.sub中有一个扩展Abstract的具体类: packa
com.testpkg
中,我有一个抽象类:
package com.testpkg;
public abstract class Abstract {
public int test();
}
注意我自愿省略了test()
方法的abstract
修饰符
然后我在packagecom.testpkg.sub
中有一个扩展Abstract
的具体类:
package com.testpkg.sub;
public class Concrete extends Abstract {
public int test() {
return 0;
}
}
我使用以下方法测试这些类:
package com.testpkg;
import com.testpkg.sub.Concrete;
public class TestMain {
public static void main(String[] args) {
Abstract c = new Concrete();
System.out.println(c.test());
}
}
如果我试图编译此文件,显然会出现两个错误:
The method test() requires a body instead of a semicolon
但如果我运行测试类:0
将打印在控制台上强>
这对我来说似乎很奇怪。你能解释一下为什么在Abstract
类中错误地声明了test()
注意我正在使用EclipseIDE编译/运行我的代码。您的类Abstract
有编译错误,因为应该定义非抽象方法,所以它应该有一个主体<代码>抽象
限定符仅在接口的情况下是可选的。您的类抽象
有编译错误,因为应该定义非抽象方法,所以它应该有一个主体<代码>抽象限定符仅在接口的情况下是可选的。您的类抽象
有编译错误,因为应该定义非抽象方法,所以它应该有一个主体<代码>抽象限定符仅在接口的情况下是可选的。您的类抽象
有编译错误,因为应该定义非抽象方法,所以它应该有一个主体abstract
限定符仅在接口的情况下是可选的。在test()
方法上需要abstract
限定符。您可能正在运行一个旧的类文件。如果将return语句的值更改为0以外的值,您将看到它没有运行此代码。在test()
方法上需要一个abstract
限定符。您可能正在运行一个旧的类文件。如果将return语句的值更改为0以外的值,您将看到它没有运行此代码。在test()
方法上需要一个abstract
限定符。您可能正在运行一个旧的类文件。如果将return语句的值更改为0以外的值,您将看到它没有运行此代码。在test()
方法上需要一个abstract
限定符。您可能正在运行一个旧的类文件。如果将return语句的值更改为0以外的值,您将看到它没有运行此代码。Eclipse允许您运行“半成品”代码。它在这里运行良好的原因是,在运行时,您永远不会真正依赖于抽象类的细节,因此,如果您有这种类型的编译错误,这其实并不重要。Eclipse允许您运行“半生不熟”的代码。它在这里运行良好的原因是,在运行时,您永远不会真正依赖于抽象类的细节,因此,如果您有这种类型的编译错误,这其实并不重要。Eclipse允许您运行“半生不熟”的代码。它在这里运行良好的原因是,在运行时,您永远不会真正依赖于抽象类的细节,因此,如果您有这种类型的编译错误,这其实并不重要。Eclipse允许您运行“半生不熟”的代码。它在这里运行良好的原因是,在运行时,您永远不会真正依赖于抽象类的细节,因此,如果您有这种类型的编译错误,这其实并不重要。如果您的代码没有编译,您的代码如何运行?@WIll我正在使用Eclipse。它提醒存在编译错误,但请允许我运行代码。我相信这就是您问题的答案。Eclipse允许您运行“半成品”代码。它在这里运行良好的原因是,在运行时,您从未真正依赖于抽象类的细节,因此,如果其中存在这种类型的编译错误,这并不重要。您是否尝试过在构建之前清理项目?正如其他人指出的,您可能有一个基于正确抽象类版本的类文件。@Benjamin是的,我已经尝试过清理项目。什么都没变。如果你的代码没有编译,它会如何运行?@WIll我正在使用Eclipse。它提醒存在编译错误,但请允许我运行代码。我相信这就是您问题的答案。Eclipse允许您运行“半成品”代码。它在这里运行良好的原因是,在运行时,您从未真正依赖于抽象类的细节,因此,如果其中存在这种类型的编译错误,这并不重要。您是否尝试过在构建之前清理项目?正如其他人指出的,您可能有一个基于正确抽象类版本的类文件。@Benjamin是的,我已经尝试过清理项目。什么都没变。如果你的代码没有编译,它会如何运行?@WIll我正在使用Eclipse。它提醒存在编译错误,但请允许我运行代码。我相信这就是您问题的答案。Eclipse允许您运行“半成品”代码。它在这里运行良好的原因是,在运行时,您从未真正依赖于抽象类的细节,因此,如果其中存在这种类型的编译错误,这并不重要。您是否尝试过在构建之前清理项目?正如其他人指出的,您可能有一个基于正确抽象类版本的类文件。@Benjamin是的,我已经尝试过清理项目。什么都没变。如果你的代码没有编译,它会如何运行?@WIll我正在使用Eclipse。它会提醒存在编译错误,但请允许我