Tag: 私有成员

为什么Java 8接口中不允许使用`private static`字段?

当我尝试编译以下代码时 public interface SomeInterface{ private static Logger logger = Logger.getLogger(); public default void someMethod(){ logger.info(“someMethod: default implementation”); } } 我收到一个错误 Illegal modifier for the interface field SomeInterface.logger; only public, static & final are permitted 当我删除private修饰符时,代码编译,但我不希望包中的其他类看到此字段。 为什么Java在实际上有意义的时候不允许我做这样的事情?

私有字段是否由子类inheritance?

我已经读过子类不能inheritance私有字段或方法。 但是,在这个例子中 class SuperClass { private int n=3; int getN() { return n; } } class SubClass extends SuperClass { public static void main(String[] args) { SubClass e = new SubClass(); System.out.println(“n= ” + e.getN()); } } 当我运行main我得到n=3的输出。 这似乎是SubClass从SuperClassinheritance私有属性n 。 所以,请解释这里发生了什么。 谢谢。

有引用时可以访问Java私有字段吗?

我今天遇到了以下“奇怪”function – 如果您在A类主体中引用了A类中的对象,则可以访问该对象的私有字段 – 即: public class Foo{ private int bar; private Foo foo; public void f() { if(foo.bar == bar) // foo.bar is visible here?! { // } } } 有人对此有一个很好的解释吗?

私有成员访问Java

私有成员是在类级别还是在对象级别访问。 如果它在对象级别,则以下代码不应编译 class PrivateMember { private int i; public PrivateMember() { i = 2; } public void printI() { System.out.println(“i is: “+i); } public void messWithI(PrivateMember t) { ti *= 2; } public static void main (String args[]) { PrivateMember sub = new PrivateMember(); PrivateMember obj = new PrivateMember(); obj.printI(); sub.messWithI(obj); obj.printI(); } } 请说明在sub的messWithI()方法中访问obj的成员i是否有效