【发布时间】:2016-09-06 01:56:10
【问题描述】:
我有两个类,A 类和 B 类,它们扩展了 A 类。 我们说你不能访问超类的私有成员。假设类 A 有一个返回私有成员的公共方法。现在,如果我们创建一个类 B 的实例并调用该方法,我们实际上可以看到它可以访问私有成员。为什么会这样?
【问题讨论】:
-
因为 getter/setter 是为此而生的,它们让你处理任何类的私有变量
标签: java inheritance private
我有两个类,A 类和 B 类,它们扩展了 A 类。 我们说你不能访问超类的私有成员。假设类 A 有一个返回私有成员的公共方法。现在,如果我们创建一个类 B 的实例并调用该方法,我们实际上可以看到它可以访问私有成员。为什么会这样?
【问题讨论】:
标签: java inheritance private
private public protected 和 default 修饰符定义了组件在哪个范围内可以访问,getX() 定义在类 A 的范围内,其中 x 被定义为私有,因此它可以访问 x。
【讨论】:
A 类可以访问私有变量,B 类可以访问 getX 方法。当您调用 A.getX() 时,A 类传递 x 的值。把它想象成一个代理。您无权访问该对象,但您可以通过可以访问的东西路由您的请求。
【讨论】:
通过向A 类添加getter 方法,您已更改A 公开的协定,以允许所有其他类只读访问该成员。只有一个 getter 不允许其他任何人(包括子类)修改私有成员,只能读取它。
没有特别的理由应该以其他类没有的方式限制子类。
【讨论】:
无论它的内部实现是什么,您仍然在访问它的公共成员(方法)。你不能直接访问私有成员,就是这个意思。
【讨论】: