加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:01:58 所属栏目:Java 来源:网络整理
导读:出于某种原因,我似乎无法在定义它的包之外实现抽象类. package1中的抽象类无法在package2中的类中实现.为什么这不是合法的 Java? package com.stackoverflow.abstraction.package1;abstract public class BaseClass { abstract Long foo();}package com.sta
出于某种原因,我似乎无法在定义它的包之外实现抽象类. 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运行时环境(版本1.7.0-u4-b13-20120301)
尝试了两个Java版本.当然不是在同一时间:)

解决方法

您的两个foo方法具有默认的“包”访问权限.您的Implementation2类甚至无法调用该方法 – 因此能够覆盖它没有多大意义.

目前尚不清楚您希望他们拥有什么级别的访问权限,但最简单的方法可能是将它们公之于众.目前,您只是说package1中的调用者可以调用BaseClass.foo(),但只有package2中的调用者可以调用Implement2.foo().这显然没有多大意义.您希望谁能够访问该方法?如果您只希望类或子类中的调用者能够调用它,那么请将其保护 – 否则将其公开.

有关访问修饰符的更多详细信息,请参见section 6.6 of the Java Language Specification(和Java tutorial).特别是,在浏览各种访问修饰符后:

Otherwise,we say there is default access,which is permitted only when the access occurs from within the package in which the type is declared.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读