【问题标题】:Accessing private members of the superclass [duplicate]访问超类的私有成员[重复]
【发布时间】:2016-09-06 01:56:10
【问题描述】:

我有两个类,A 类和 B 类,它们扩展了 A 类。 我们说你不能访问超类的私有成员。假设类 A 有一个返回私有成员的公共方法。现在,如果我们创建一个类 B 的实例并调用该方法,我们实际上可以看到它可以访问私有成员。为什么会这样?

【问题讨论】:

  • 因为 getter/setter 是为此而生的,它们让你处理任何类的私有变量

标签: java inheritance private


【解决方案1】:

private public protected 和 default 修饰符定义了组件在哪个范围内可以访问,getX() 定义在类 A 的范围内,其中 x 被定义为私有,因此它可以访问 x。

【讨论】:

    【解决方案2】:

    A 类可以访问私有变量,B 类可以访问 getX 方法。当您调用 A.getX() 时,A 类传递 x 的值。把它想象成一个代理。您无权访问该对象,但您可以通过可以访问的东西路由您的请求。

    【讨论】:

      【解决方案3】:

      通过向A 类添加getter 方法,您已更改A 公开的协定,以允许所有其他类只读访问该成员。只有一个 getter 不允许其他任何人(包括子类)修改私有成员,只能读取它。

      没有特别的理由应该以其他类没有的方式限制子类。

      【讨论】:

        【解决方案4】:

        无论它的内部实现是什么,您仍然在访问它的公共成员(方法)。你不能直接访问私有成员,就是这个意思。

        【讨论】:

          猜你喜欢
          • 2013-01-09
          • 2013-09-18
          • 2014-05-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多