匿名\具体子类是否继承抽象父私有字段?

时间:2016-05-30 03:16:02

标签: java oop inheritance abstract-class

我知道抽象类无法实例化。然而,如果我们编写类似下面代码的代码,它将实例化抽象父代的匿名子类。根据Java规范,子类对象不应该有权访问其父私有成员。

让我感到困惑的是,匿名子类对象能够通过打印存储在" i"中的值来访问抽象父类的私有字段。我有什么误解?

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);
}}

1 个答案:

答案 0 :(得分:4)

这很好,因为i中的方法正在访问Bprint()被另一个类中的代码调用的事实并不重要;可见性修饰符仅影响直接访问。

(你不需要匿名子类来显示这个;你会看到与具体类相同的效果。)

这就是封装应该如何工作:如果不能在其他使用私有字段的类中调用方法,那么不同的类很难以生产的方式相互使用。 B方法有责任实现public方法,使其私有字段不受被调用方法的不利影响。