gpt4 book ai didi

java - 初始化抽象类的成员,没有子类具有写访问权限

转载 作者:行者123 更新时间:2023-12-04 05:15:07 25 4
gpt4 key购买 nike

我有一个抽象类:

public abstract class AbstractCommand {

private static State state;
}

意图
  • State 类的对象由一些“控制类”提供,提供每个 AbstractCommand 所需的数据子类
  • 每个子类都需要读取权限
  • 子类不允许更改字段

  • 目前的方法

    字段 state应该由程序的“控制类”初始化,以便子类(定义命令)可以使用它(只读)。子类是内部定义的,应该用作用户的接口(interface)。此用户不应拥有对 state 的写入权限.

    问题
  • 添加公众 setState() AbstractCommand 中的方法将使所有子类以及用户
  • 都可以访问它
  • 将字段设为 final 将强制在抽象类中创建对象,“控制类”必须使用该对象,而且它不可替换

  • 你如何处理这样的事情?

    再试一次

    因为一些答案建议使用包可见性的解决方案,所以我想知道这是否会做得很好:

    通过将来自“控制类”(来自包外部)的调用委托(delegate)给抽象类,在同一包中拥有一个提供所需信息的类。

    听起来也有点模糊,但你怎么看?

    最佳答案

    如果我理解正确,您正在寻找 protected关键词。

    在 java 中,此关键字允许子类和包字段访问,但不公开该字段。这允许您在不牺牲该领域的公共(public)保护的情况下寻找您正在寻找的公共(public)只读行为。唯一可以直接访问 protected 字段的类将是同一包中的任何内容或直接子类(可能位于不同的包中)。

    来源:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

    关于java - 初始化抽象类的成员,没有子类具有写访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14383276/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com