繁体   English   中英

Java-如何使超类的可变字段(通过子类)保持不变,但如何保护它们免受main()影响?

[英]Java - How to make changeable (by subclass) static fields of a superclass, but protect them from i.e. main()?

如何保护某些超类的静态字段不被更改(例如在main方法中),同时通过子类中的setter保持这种可能性。 据我所知,将其设为私有不会成功,因为私有静态字段不是子类的一部分。 我唯一能理解的就是使它们受到保护,并将那些类(没有主类)包含在包中。 有没有更简单的解决方案?

class Main{
    public static void main(String[] args){
        Foo.precious = "nothingness";
    }
}
class Foo{
    static String precious = "Precious data";
}

class Bar extends Foo{
    Foo.precious = "More precious";
}

而且,如果我在Foo类中的珍贵对象上添加了一个私有修饰符,那么我将保护它不受main()的影响,但是也会失去在子类中对其进行更改的能力。

没有访问修饰符可使成员/静态/方法对子类可见,但对包不可见。

这取自Oracle文档 在此处输入图片说明

当期望子类覆盖其超类的行为时,您必须遵守OOD规则:最好使它们成为非静态变量,以便子类可以重新定义它们并覆盖其公共获取器:

class Foo{
    private String precious = "Precious data";

    public String getPrecious() { return precious; }
}

class Bar extends Foo{
    private String precious = "more precious";

    @Override       
    public String getPrecious() { return precious; }
}

class Main{
    public static void main(String[] args){
    Foo.precious = "nothingness"; // Compilation error: field precious is not visible.
    Foo.setPrecious("x");   // Compilation error: No such public method.
    }
}

暂无
暂无

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

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