将变量添加到抽象类或子类?

时间:2012-02-24 05:46:48

标签: java

我有这个困境,我正在设计一个项目,基本上它将有一个基类 - > entityclass关系,实体类从baseclass继承。现在基类是抽象的,可能有:

abstract class MyAbstractClass{

//All this methods need to be implemented
abstract int getHouseId(int id);
abstract string getHouseName(String s);

}

然后我想做类似的事情:

 public class MyChildClass extends MyAbstractClass{

    private int _hId = 0;
    private String _hName = "";

    public int getHouseId(int id)
    {
       if(id > _hId)
       {
          return _hId;
       }
       return id;
    }
    public String getHouseName(String s)
    {
        if(s.Equals(_hName))
        {
           return _hName; 
        }
        return s;
     }

      //AND YOU HAVE YOUR SETTERS SOMEWHERE HERE
   }

现在请原谅如果语法错误,我只是动态地做了,我的问题是在抽象类中声明变量并从那里设置和获取东西,或者在子类中创建变量更好吗?我很困惑,如果在抽象类中使用它,它们应该如何在抽象类中声明,我可以将它们设置为私有并添加属性以获取值吗?或者最好在子项中执行它类?。基本上我想强制执行一组程序员来始终使用抽象类作为他们必须实现的函数。对这个概念有点困惑。我试图谷歌它,但没有看到很多关于抽象类中的变量和属性的文章,也许它应该在子类中使用。感谢您的帮助,让我明白这一点。

3 个答案:

答案 0 :(得分:2)

  

最好在抽象类中声明变量并从那里设置和获取东西,或者在子类中创建变量吗?

这个想法是尽量减少重复。如果要复制每个子类中的逻辑和变量,那么最好将它放在超类中。

  

...如果在抽象类中使用它,它们应该如何在抽象类中声明,我可以在那里将它们设为私有并添加属性来获取值吗?

通常的做法是在抽象类中使变量为private。并使用public / protected getter / setter修改/访问它们。

  

基本上我想强制一组程序员总是使用抽象类作为他们必须实现的函数。

所以,你走了。在抽象类中有属性和getter / setter。并且只使那些你希望你的开发人员用他们自己的逻辑实现的抽象方法。

答案 1 :(得分:1)

抽象类的整个想法是它们可以包含一些您需要包含所有子类的行为或数据。因此,您可以将它们保密,然后提供getter和setter。

或者如果你有所有子类需要使用的常量,那么将它们定义为public static final。

看看这里:

Java - Abstract class to contain variables?

答案 2 :(得分:1)

这完全取决于您,但如果每个派生类需要某个功能,那么将它添加到您的abstract基类是有意义的。这包括变量,常量,方法等。

创建类abstract并不妨碍您实现getter和setter,您可以将这些变量封装在abstract基类中,强制派生类调用这些方法以访问变量。你会发现这是一种常见的做法。您的MyChildClass实际上可能是abstract基类,并且会做到这一点。

如果您不需要或想要在abstract类中声明的变量,并且您希望派生类只包含某些函数的实现,那么另一种选择就是使它成为interface