因为我没有使用Java太多的经验,但这里是一个问题,我可能是错的。
我有一个包含许多方法的类(基本上它是一个简单的库)。
我创建这个类的一个对象,让我们说, MyLibrary obj = new MyLibrary(parameters);
参数设置任何必要的功能为库正常运行。
然后,我可以叫obj.getSomething
/ obj.setSomething
/ obj.createSomething
等等...
在我的主类我真的只需要一个这样的库的对象。
现在...它会更加有用,我不把它作为一个对象,而是把它作为extends
,然后像一个构造函数,我将手动调用库中创建一个功能?
编辑:
一类在MyLibrary之间的关系是非常密切的。 基本上,我有很多类里面做类似的事情,但是有一些不同的高层功能。 所以我分开, 必须在所有这些类的方法。
现在看来,这是非常相似的shape
类triangle
, circle
, square
的例子。 所以MyLibrary
类似于shape
它包含了所有的基础。
你强烈地描述类似于一个实用工具类 ,类似于Java的Collections
。 本类只有static
方法和私人构造,以防止实例。 这是Java著名的惯用模式 - 你可以用它来创建自己的提供相关功能的方法组。
你不应该在所有的扩展,甚至实例,实用工具类。 与Java-5开始,可以静态导入,从而使您可以使用他们的方法未做明确提到他们的阶级。
extends
当你需要一个继承层次使用。 这似乎更符合逻辑代码放在两个独立的类在这里,像你现在拥有它。
此外,如果你的“图书馆级”做多无关的东西,它可能应该分成多个类 - 每个任务。
你应该只使用extends
当你有一个关系。 所以,你能想到的, 是我的主类在MyLibrary还是应该我班上有一个在MyLibrary。
从你描述的问题,这听起来就像在MyLibrary是要走的路。
在有限的细节,你提供,你可能要考虑的Singleton模式 。
extends
当一个对象需要继承另一个特点和功能,因为它们是密切相关的,才应使用。 举例来说,如果你有一个Shape
类,那么你将延长Shape
创建Circle
, Square
和Triangle
。 您在使用前extends
,你应该了解的传承,当你应该和不应该使用它。
我想使这个static
类中使用。 类同的Java类数学课的API数学课 。 你可以只使用类的方法未做它的一个对象。
那么如果你的类,如果执行的实用功能,那么你应该标记所有方法的static
和使用操作,如
MyLibrary.doSomething();
MyLibrary.createSomething();
MyLibrary.getSomething();
但是,这不会让你保持一些数据成员在类,如果你让他们,他们将是静态的为好。
我不这么认为, extends
适合你的情况。
此外,如果你想只保留一个对象,那么你应该看看Singleton
为可创建只有一个实例的类。
假设你只是用MyLibrary
,不得改变它,你应该使用的包装,使整个事情辛格尔顿,如已经提出代码大师 。
public class MyLibraryWrapper {
private static MyLibrary instance = null;
private MyLibraryWrapper() {}
public static MyLibrary getInstance() {
if (instance == null)
instance = new MyLibrary();
return instance;
因此,在你的代码,你将使用
MyLibraryWrapper.getInstance().getSomething();
在Java 1.5中创建单张或以上的最佳方法是使用ENUM。
public enum Test {
INSTANCE;
}
实例测试类的唯一实例。