Java中的Object vs Extend

时间:2012-07-27 15:36:10

标签: java object extends

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

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

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

这些参数设置了库正确运行所需的任何功能。

然后我可以致电obj.getSomething / obj.setSomething / obj.createSomething等等......

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

现在......对于我来说,不要将它作为一个对象使用它会更有用,但是把它作为extends,然后在库中创建一个函数,就像我会手动调用的构造函数一样? / p>


修改

一个类和MyLibrary之间的关系非常接近。基本上,我有很多类做类似的事情,但有一些不同的更高层功能。所以我分开了必须在所有这些类中的方法。

它似乎与shape类和trianglecirclesquare示例非常相似。因此MyLibrary类似于包含所有基础的shape

8 个答案:

答案 0 :(得分:5)

您所描述的内容非常类似于实用程序类,类似于Java的Collections。该类只有static个方法,以及一个私有构造函数来防止实例化。这是Java中一个众所周知的惯用模式 - 您可以使用它来创建自己的方法组,提供相关的功能。

您根本不应扩展或甚至实例化实用程序类。从Java-5开始,您可以静态导入它们,以便您可以使用它们的方法,而无需明确引用它们的类。

答案 1 :(得分:3)

需要继承层次结构时使用

extends。将代码放在两个单独的类中似乎更合乎逻辑,就像现在一样。

另外,如果你的“库类”做了多个不相关的事情,它应该被分成多个类 - 每个任务一个。

答案 2 :(得分:3)

当你有一个是-a 的关系时,你应该只使用extends。所以,您可以认为,我的主要课程是MyLibrary,还是我的班级 是MyLibrary。

根据您描述的问题,听起来好像是MyLibrary。

答案 3 :(得分:0)

由于您提供的详细信息有限,您可能需要考虑Singleton pattern

extends只应在一个对象需要继承另一个对象的特性和功能时使用,因为它们密切相关。例如,如果您有一个Shape类,那么您可以将Shape扩展为创建CircleSquareTriangle。在使用extends之前,您应该了解有关遗产的更多信息,以及何时应该和不应该使用遗产。

答案 4 :(得分:0)

我会将其设为static类。与java的MATH类API for math class类似。您可以只使用类的方法而不创建它的对象。

答案 5 :(得分:0)

那么如果您的类执行实用程序功能,那么您应该将所有方法标记为static并使用

之类的操作
MyLibrary.doSomething();
MyLibrary.createSomething();
MyLibrary.getSomething();

但是这不允许你在课堂上保留一些数据成员,如果你保留它们,它们也会是静态的。

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

此外,如果您只想保留一个对象,那么您应该查看Singleton一个只能创建一个实例的类。

答案 6 :(得分:0)

假设您只是使用MyLibrary并且可能不会改变它,您应该使用一个包装器,使整个事物成为Singleton,正如Code-Guru已经提出的那样。

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();

答案 7 :(得分:0)

在java 1.5或更高版本中创建单例的最佳方法是使用ENUM。

public enum Test { 
    INSTANCE;
}

INSTANCE是Test类的唯一实例。