Java类的修饰符
我正在尝试创建一个定制的JButton。我注意到,当我声明类MyButton扩展JButton时,它工作正常。但是当我将类名更改为私有类MyButton或保护类MyButton时,Eclipse显示了非法的修饰符错误 我知道在一个文件中只能将一个类声明为公共类,但是将其声明为私有类有什么错呢?有人能解释一下在这种情况下,不同的修饰符是如何作用于类的吗?谢谢Java类的修饰符,java,swing,class,declaration,modifier,Java,Swing,Class,Declaration,Modifier,我正在尝试创建一个定制的JButton。我注意到,当我声明类MyButton扩展JButton时,它工作正常。但是当我将类名更改为私有类MyButton或保护类MyButton时,Eclipse显示了非法的修饰符错误 我知道在一个文件中只能将一个类声明为公共类,但是将其声明为私有类有什么错呢?有人能解释一下在这种情况下,不同的修饰符是如何作用于类的吗?谢谢 class MyButton extends JButton { @Override protected void paintComp
class MyButton extends JButton {
@Override
protected void paintComponent(Graphics g){
Graphics2D g2d =(Graphics2D)g;
g2d.setColor(new Color(200,50,50,255));
g2d.fill(new RoundRectangle2D.Float(0,0,getWidth(),getHeight(),100,100));
}
}
public class CustomButton extends JFrame{
public CustomButton (){
add(new MyButton());
}
public static void main(String[] args) {
CustomButton b = new CustomButton();
b.setVisible(true);
}
}
顶级类只允许使用以下访问修饰符: 公共,使其可从任何地方访问 默认值/无,使其包专用,即仅对同一包中的类可见 从: 访问修改器public§6.6仅适用于顶级课程 §7.6和成员类别§8.5,而非本地类别§14.3或 匿名类§15.9.5 受保护和专用的访问修饰符§6.6仅适用于 直接封闭类或枚举声明中的成员类 §8.5 以及: 如果顶级类型声明包含 以下任一访问修饰符:受保护、专用或 静态的
因此,如果您想要两个在同一文件中声明多个顶级类,其中一个匹配源文件名的类必须标记为public,而其他类则需要具有默认的包私有访问权限。尽管Java中有4个访问修饰符public、protected、default、private,您只能使用public或default作为最外层类顶级类的访问修饰符 如果类是内部类,则可以使用其他访问修饰符
想想这个。如果您将顶级类设置为私有,并且java允许,那么您可以从中获得什么好处?由于私有内容不能由除自身之外的任何其他地方访问,因此允许最外层类的私有访问修饰符没有任何意义在您的示例中,我没有看到内部类…更不用说,您不会看到MyButton的任何文本或图标…这不是内部类!内部类应该在父类内部-CustomButton类在外部。感谢大家指出这一点!我对这个定义和类修饰符感到困惑。我已经编辑了这个问题。希望它现在读得更好。不,这里仍然没有看到内部类…也许你应该看看是的,我的意思是我发现一个文件中的两个类并不等于其中一个是内部类。我认为,内部类是指公共类中的一个私有类。我修改了这个问题,我想我应该把这个问题表述为:为什么我们不能在一个文件中声明public和另一个私有的、受保护的类。谢谢!或者,我可以在一个文件中声明一个公共类,并在其中嵌套私有类,这不会影响它们的行为?可以,但要注意声明它们为public/protected/private的效果。静态成员类的行为也不同于非静态成员类。该规范或任何体面的Java书籍都会为您提供所有细节。