繁体   English   中英

java类无法从Component覆盖size()?

[英]java class cannot override size() from Component?

我们不能从Java的Component类重写size()吗?

这是一个简单的类,myPanels是一个在构造函数中已初始化的ArrayList。

    /**
 * Returns number of panels
 */
@Override
public int size(){
    return myPanels.size();
}

读取错误:返回类型与Component.size()不兼容



编辑-解决方案

解决方法是选择其他方法名称。 使用了'size()'以外的东西

如果要找到可靠地更改GUI组件大小的方法,则应重写getPreferredSize()而不是处理size或getSize() 这样,您的组件就可以在大多数布局管理器中很好地发挥作用。

否则,如果您正在使用此方法返回其持有的ArrayList的大小,而不是尝试设置组件的可视化大小,请为您的类提供一个执行此操作的方法,但不要将其命名为getSize()因为这会混淆其他编码人员和编译器。 而是将其命名为getMyPanelSize()或类似名称。

假设您要覆盖java.awt.Component.size()

答:从Java 1.1开始已弃用,请改用getSize()。

B:无论哪种方式,它都必须返回一个Dimension

size()必须返回Dimension,从1.1开始不推荐使用

我认为您想覆盖getSize()?

在Java 5.0之前,重写方法时,参数和返回类型必须完全匹配。 在Java 5.0中,它引入了一种称为协变返回类型的新功能。 您可以覆盖具有相同签名的方法,但返回所返回对象的子类。 换句话说,子类中的方法可以返回一个对象,该对象的类型是该方法返回的类型的子类,该方法在超类中具有相同的签名。

Component的size()方法返回Dimension类型的对象-这意味着您无法返回int。

一种方法是将方法命名为别的名称,例如panelsSize() 另一个是返回Dimension

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM