[英]Hiding methods of superclass
我已经阅读了Overriding and Hiding Methods教程。 从那以后,我收集了以下内容:
如果子类定义的类方法与超类中的类方法具有相同的签名,则子类中的方法会隐藏超类中的方法。
因此,我做了以下事情:
import javax.swing.JTextArea;
public final class JWrappedLabel extends JTextArea{
private static final long serialVersionUID = -844167470113830283L;
public JWrappedLabel(final String text){
super(text);
setOpaque(false);
setEditable(false);
setLineWrap(true);
setWrapStyleWord(true);
}
@Override
public void append(final String s){
throw new UnsupportedOperationException();
}
}
我不喜欢这个设计的是append
仍然是子类的可见方法。 我可以将身体留空,而不是抛出UnsupportedOperationException
。 但两人都觉得难看。
话虽如此,有没有更好的方法来隐藏超类的方法?
如果可能,请使用合成。 这是Joshua Bloch在Effective Java,Second Edition中的推荐 。
第16项:赞成组合而不是继承
例如:
import javax.swing.JTextArea;
public final class JWrappedLabel {
private static final long serialVersionUID = -844167470113830283L;
private final JTextArea textArea;
public JWrappedLabel(final String text){
textArea = new JTextArea(text);
textArea.setOpaque(false);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
}
//add methods which delegate calls to the textArea
}
不知道我知道的。
这是一个OOP问题/功能。 你的类仍然是一个JTextArea,因此它可以被不知道你的子类的代码使用,它将它视为JTextArea,期望JTextArea中的所有方法都在那里并正常工作。
如果需要定义新接口,则应定义一个不扩展JTextArea的新类,而是封装它。
是的,使用代理而不是扩展 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.