Java 匿名\具体子类是否继承抽象父私有字段?
我理解抽象类不能被实例化。然而,如果我们编写下面所示的代码,它将实例化抽象父类的匿名子类。根据Java规范,子类对象不应该有权访问其父私有成员 让我困惑的是,匿名子类对象能够通过打印存储在“i”中的值来访问抽象父类的private字段。我有什么误解Java 匿名\具体子类是否继承抽象父私有字段?,java,oop,inheritance,abstract-class,Java,Oop,Inheritance,Abstract Class,我理解抽象类不能被实例化。然而,如果我们编写下面所示的代码,它将实例化抽象父类的匿名子类。根据Java规范,子类对象不应该有权访问其父私有成员 让我困惑的是,匿名子类对象能够通过打印存储在“i”中的值来访问抽象父类的private字段。我有什么误解 public class Main { public static void main (String [] args){ B myB = new B() {}; myB.print(); }} public abstr
public class Main {
public static void main (String [] args){
B myB = new B() {};
myB.print();
}}
public abstract class B {
private int i = 5;
public void print(){
System.out.println(i);
}}
这很好,因为
i
是通过B
中的方法访问的。另一个类中的代码正在调用print()
,这一事实并不重要;可见性修改器仅影响直接访问
(您不需要匿名子类来显示这一点;您可以在具体类中看到同样的效果。)
这就是封装的工作原理:如果不同的类不能在使用私有字段的其他类中调用方法,那么它们就很难以高效的方式相互使用。
B
有责任实现其public
方法,使其私有字段不会受到调用这些方法的不利影响。这很好,因为i
由B
中的方法访问。另一个类中的代码正在调用print()
,这一事实并不重要;可见性修改器仅影响直接访问
(您不需要匿名子类来显示这一点;您可以在具体类中看到同样的效果。)
这就是封装的工作原理:如果不同的类不能在使用私有字段的其他类中调用方法,那么它们就很难以高效的方式相互使用。B
有责任实现其public
方法,使其私有字段不会受到调用这些方法的不利影响