2012-02-24 60 views
1

我有这个困境,我正在设计一个项目,基本上它会有一个baseclass - > entityclass关系,实体类从基类继承。现在的基类是抽象的,必须是这样的:将变量添加到抽象类或子类中?

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 
    } 

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

回答

2

是更好的抽象类声明的变量和设置,并从那里得到的东西,或创建在子类中的变量?

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

...如果在抽象类使用它,又该如何在抽象类中声明,我可以让他们私底下并添加属性来获取值?

一般实践是将抽象类中的变量隐藏起来。并使用public/protected getter/setter修改/访问它们。

基本上我想实施一组程序员总是使用抽象类的,他们已经实现的功能..

所以,在这里你去。抽象类中有属性和getter/setter。并且只做那些你希望你的开发者用自己的逻辑实现的抽象方法。

1

抽象类的整体思想是它们可以包含一些你需要包含的所有子类的行为或数据。所以你可以保持他们私密,然后提供getter和setter。

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

看一看这里:

Java - Abstract class to contain variables?

1

这真的取决于你,但是如果某个功能是每个派生类所要求的,那么将它添加到你的基类中是有意义的。这包括变量,常量,方法等。

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

如果您不需要或想要abstract类中声明的变量,并且您希望派生类仅包含某些函数的实现,那么替代方法是将其替换为interface