java - 无法从其他包实现抽象类

标签 java abstract-class

出于某种原因,我似乎无法在定义它的包之外实现抽象类。 package1 中的抽象类不能在 package2 中的类中实现。为什么这不是合法的 Java?

package com.stackoverflow.abstraction.package1;

abstract public class BaseClass {
    abstract Long foo();
}

package com.stackoverflow.abstraction.package1;

public class Implement1 extends BaseClass {
    @Override
    Long foo() {
        return null;
    }
}


package com.stackoverflow.abstraction.package2;

import com.stackoverflow.abstraction.package1.BaseClass;

/** Compiling this class will output
* - Implement2 is not abstract and does not override abstract method foo() in BaseClass
* - error: method does not override or implement a method from a supertype
*/

public class Implement2 extends BaseClass {
    @Override
    Long foo() {
        return null;
    }
}

运行: OS X 10.6.8 - Java(TM) SE 运行时环境(构建 1.6.0_31-b04-415-10M3646) - OpenJDK 运行时环境(build 1.7.0-u4-b13-20120301) 尝试了两个 Java 版本。当然不是同时:)

最佳答案

该方法是包级可见性,因此您不能在其他包中覆盖它。

abstract Long foo();

If a method has no modifier (the default, also known as package-private), it is visible only within its own package

如果您确实需要覆盖它,请将其设置为 protected

protected abstract Long foo();

信息

关于java - 无法从其他包实现抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10799193/

相关文章:

java - 快速修复 - 我是否应该在代码中处理序列重置和重新发送请求

java - 我不能将 @NonNullByDefault 与没有空注释约束的继承类混合使用吗?

java - "return a type that is compatible"是什么意思?

java - 我该如何解决这个 Java Generics 通配符/抽象歧义问题?

python - 类实例化以及抽象/静态类的变量共享

java - 当实现仅在一个方法上不同时,建议使用哪种设计模式?

c# - 我如何制作可以在没有事件的情况下订阅的某些功能(就像 Unity 那样)?

java - 在 Java 中拆分数组单元格

java - 使用 Liberty 配置文件配置 log4jdbc-log4j2

java - JBoss EAP 7.1 部署失败 : WFLYCTL0013: Operation ("deploy") failed