Java 面向对象设计:getter方法(或对象)可见性

Java 面向对象设计:getter方法(或对象)可见性,java,android,oop,Java,Android,Oop,我目前正在编写一个Android游戏引擎库。扩展的基类包含两个WSLog对象,一个Android日志类方法的包装器。一个叫做gameEngineLog,它应该只在游戏引擎项目中可见,另一个叫做gameLog,它应该在游戏引擎项目和实际游戏项目中可见 在基类中,可以使用getter方法获取这两个日志 我已经通读了,以了解哪些修改器应该位于getGameEngineLog之前,以使其仅在游戏引擎项目中可见,但是没有一个修改器是公共的、受保护的、默认的或私有的,适合我的需要 如何使gameEngine

我目前正在编写一个Android游戏引擎库。扩展的基类包含两个WSLog对象,一个Android日志类方法的包装器。一个叫做gameEngineLog,它应该只在游戏引擎项目中可见,另一个叫做gameLog,它应该在游戏引擎项目和实际游戏项目中可见

在基类中,可以使用getter方法获取这两个日志

我已经通读了,以了解哪些修改器应该位于getGameEngineLog之前,以使其仅在游戏引擎项目中可见,但是没有一个修改器是公共的、受保护的、默认的或私有的,适合我的需要

如何使gameEngineLog对象仅在整个游戏引擎项目中可见,而不是实际的游戏项目

注意:游戏引擎项目中的所有其他组件类都持有基类的引用,有些组件类位于不同的包中。我只想让这些类引用gameEngineLog对象。任何方法都是受欢迎的

以下是一个视觉表示:


提前感谢。

正如@JB Nizet所说,似乎游戏引擎类和游戏类应该有不同的基类。这些类仍然可以共享一个通用的基类,该基类将具有getGameLog。至少,游戏引擎类可以有一个单独的子类

如果只有这个基类的子类需要访问getGameEngineLog,那么它可以作为游戏引擎类的子类中的受保护成员引入

如果打算从其他类调用此日志,但仅从游戏引擎中的类调用,并且package private不会这样做,那么一种方法是向任何可以使用此日志的类提供一个对象,该对象提供从游戏引擎对象访问此日志的权限

例如,如果对日志的访问是从一个中心点进行控制的,并且一个执行不好的游戏即使通过黑客也不可能访问它,那么您的项目可以创建一个单例来完成所有日志记录,它可以直接或间接创建任何其他可以访问日志的对象,并为他们提供一个具有日志功能的对象


实现提供日志访问权限的对象的一种方法是,将其作为具有私有构造函数的游戏引擎类的内部类的实例,这样只有游戏引擎才能创建它。

您确定受保护的修饰符不适合您的需要吗??因为您的问题只需要使用受保护的修改器。。我想你应该再看一遍。受保护的修饰符仍然会让游戏项目中的基类继承getGameEngineLog。@LukeTaylor。。我想我在你的问题中漏掉了什么。。让我再检查一次。这是一个好迹象,表明您的基类有太多的责任,应该至少分为两个不同的类。因为它作为两种类的超类,应该分开:来自游戏引擎的类,以及来自游戏本身的类。