对象VS用Java扩展(Object vs Extend in Java)

2019-09-20 08:43发布

因为我没有使用Java太多的经验,但这里是一个问题,我可能是错的。

我有一个包含许多方法的类(基本上它是一个简单的库)。

我创建这个类的一个对象,让我们说, MyLibrary obj = new MyLibrary(parameters);

参数设置任何必要的功能为库正常运行。

然后,我可以叫obj.getSomething / obj.setSomething / obj.createSomething等等...

在我的主类我真的只需要一个这样的库的对象。

现在...它会更加有用,我不把它作为一个对象,而是把它作为extends ,然后像一个构造函数,我将手动调用库中创建一个功能?


编辑:

一类在MyLibrary之间的关系是非常密切的。 基本上,我有很多类里面做类似的事情,但是有一些不同的高层功能。 所以我分开, 必须在所有这些类的方法。

现在看来,这是非常相似的shapetrianglecirclesquare的例子。 所以MyLibrary类似于shape它包含了所有的基础。

Answer 1:

你强烈地描述类似于一个实用工具类 ,类似于Java的Collections 。 本类只有static方法和私人构造,以防止实例。 这是Java著名的惯用模式 - 你可以用它来创建自己的提供相关功能的方法组。

你不应该在所有的扩展,甚至实例,实用工具类。 与Java-5开始,可以静态导入,从而使您可以使用他们的方法未做明确提到他们的阶级。



Answer 2:

extends当你需要一个继承层次使用。 这似乎更符合逻辑代码放在两个独立的类在这里,像你现在拥有它。

此外,如果你的“图书馆级”做多无关的东西,它可能应该分成多个类 - 每个任务。



Answer 3:

你应该只使用extends当你有一个关系。 所以,你能想到的, 是我的主类在MyLibrary还是应该我班上有一个在MyLibrary。

从你描述的问题,这听起来就像在MyLibrary是要走的路。



Answer 4:

在有限的细节,你提供,你可能要考虑的Singleton模式 。

extends当一个对象需要继承另一个特点和功能,因为它们是密切相关的,才应使用。 举例来说,如果你有一个Shape类,那么你将延长Shape创建CircleSquareTriangle 。 您在使用前extends ,你应该了解的传承,当你应该和不应该使用它。



Answer 5:

我想使这个static类中使用。 类同的Java类数学课的API数学课 。 你可以只使用类的方法未做它的一个对象。



Answer 6:

那么如果你的类,如果执行的实用功能,那么你应该标记所有方法的static和使用操作,如

MyLibrary.doSomething();
MyLibrary.createSomething();
MyLibrary.getSomething();

但是,这不会让你保持一些数据成员在类,如果你让他们,他们将是静态的为好。

我不这么认为, extends适合你的情况。

此外,如果你想只保留一个对象,那么你应该看看Singleton为可创建只有一个实例的类。



Answer 7:

假设你只是用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();


Answer 8:

在Java 1.5中创建单张或以上的最佳方法是使用ENUM。

public enum Test { 
    INSTANCE;
}

实例测试类的唯一实例。



文章来源: Object vs Extend in Java