为什么View.setLayoutParams可以调用受保护的ViewGroup.onSetLayoutParams?

why does View.setLayoutParams can call ViewGroup.onSetLayoutParams which is protected?

在搜索android源代码时,我发现了一些我无法理解或无法忍受的地方。您可以在下面的框架源代码中看到所有 onSetLayoutParams:

./base/core/java/android/widget/Toolbar.java: protected void onSetLayoutParams(View child, ViewGroup.LayoutParams lp) {

./base/core/java/android/widget/GridLayout.java: protected void onSetLayoutParams(View child, ViewGroup.LayoutParams layoutParams) {

./base/core/java/android/widget/GridLayout.java: super.onSetLayoutParams(child, layoutParams);

./base/core/java/android/view/View.java: ((ViewGroup) mParent).onSetLayoutParams(this, params);

./base/core/java/android/view/ViewGroup.java: protected void onSetLayoutParams(View child, LayoutParams layoutParams) {

onSetLayoutParams 的每个定义都被保护,但 View.setLayoutParams 将其父级转换为 ViewGroup,然后调用 ViewGroup 的 onSetLayoutParams。我不认为这在 java 中是正确的,但所有 android 似乎 运行 都很好。

抱歉我的英语不好。

我不知何故从这个页面找到了我的答案:In Java, difference between default, public, protected, and private

Java protected 似乎使方法对 类 不可见,在同一个包中,它是一个 public 方法。