ope*_*sas 4 java inheritance function
简而言之,这可以解释为"继承与功能库"
例如,我想在javax.servlet.http.HttpServletRequest中添加一个方法,它给我整个身体,一个getBody()方法,它将通过getReader方法读取正文,只是为了举个例子.
在其他语言中,比如ruby或javascript,你可以在基类中添加一个方法,甚至可以添加到特定的实例,但在java中我看到这两个选择......
扩展HttpServletRequest(类似于MyHttpServletRequest)并添加方法
或者使用静态方法使用以下方法创建HttpServeletHelper静态类
public static String HttpServeletHelper.getBody(HttpServletRequest request)
第一种方法更面向对象,更优雅,但强迫你每次需要时都会施放你的对象,不知怎的,你必须告诉jsp使用你的类......
第二种方法只是一个很好的旧功能库......根据你的看法,它可能是好事还是坏事......
你在每种方法中看到的利弊是什么,在这种情况下哪一种更受推荐?
我会选择#2.HttpServletRequest是框架的一部分,因此Tomcat(或其他)将实例化它并将其交给您的代码.您无法选择是否使用您的子类.(实际上,随着Servlet,EJB等框架的兴起,我发现这个问题相当普遍.)
此外,最近有很多关于过度依赖继承作为反模式的文章.在Java中,继承是一种"稀缺资源":对于每个类,您只能执行一次.你应该保留对真正"子类"的东西的继承,而不仅仅是在这里和那里添加一些功能.