【问题标题】:access modifier for protected method受保护方法的访问修饰符
【发布时间】:2014-12-29 10:59:59
【问题描述】:

对于受保护的访问修饰符,与其关联的方法或属性应该对其子类可见。这是根据定义。

但有一件事我在这里无法解释。例如,我们有以下代码: 基类:

package com.set.test;

public class ModifierBase {
    private int privateInt;
    int friendlyInt;
    protected int protectedInt;
    public int publicInt;

    private void displayPrivate(){
        System.out.println("displayPrivate");
    }
    void displayFriendly(){
        System.out.println("displayFriendly");
    }
    protected void displaoyProtected(){
        System.out.println("displaoyProtected");
    }
    public void displayPublic(){
        System.out.println("displayPublic");
    }
}

一个类在不同的包中扩展了这个。

package com.another;

import com.set.test.ModifierBase;
public class ModifierSubPackgeExtend extends ModifierBase{
    public static void main(String[] args) {
        ModifierSubPackgeExtend m = new ModifierSubPackgeExtend();
        ModifierBase mb = new ModifierSubPackgeExtend();
    }
}

m 可以访问受保护的和公共的,这很酷。 但是,mb 无法访问受保护的方法或变量。

mb.protectedInt //is not accessable
m.protectedInt //is accessible

这是为什么呢?

但是对于友好的有同样的例子:

package com.set.test;
public class ModifierExtend extends ModifierBase {
    public static void main(String[] args) {
        ModifierExtend m = new ModifierExtend();
        ModifierBase mb = new ModifierExtend();
    }
}

m 和 mb 都可以访问友好修饰符。

m.friendlyInt
mb.friendlyInt

他们都很好。

为什么在使用基类声明并使用子类初始化时,对受保护的访问权限与使用子类声明和初始化两者的访问权限不同?

【问题讨论】:

  • 您到底想完成什么?此外,java 没有 friendly 修饰符。这是包级别的权限。
  • 我不,没有友好的文字作为关键字。我只是问为什么声明为基类与声明为子类相比具有不同的访问级别。与友好访问相比,为什么行为不一样。
  • 没有友好访问,只有包级访问。而且它们在不同的包中。
  • 友好访问 = 包访问。只是叫法不同而已。同样的事情......
  • 恐怕你弄错了。它们根本不是一回事。在 C++ 中,朋友级别的字段具有完全不同的行为。

标签: java modifier


【解决方案1】:

受保护的类、函数等对您当前的类、包和子包是可见的。在类的子类中也可见。

公共变量——对所有类可见。

受保护的变量——仅对它们所属的这些类和任何子类可见。

友好的变量,默认 - 不需要修饰符,对包可见。

私有变量——仅对它们所属的类可见。

有关更多信息,您可以阅读此文档:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

【讨论】:

    【解决方案2】:

    受保护的成员变量在超类中声明,但不能从同一个实例中访问。

    在这种情况下,它将无法访问,受保护的非静态变量只能从子类中访问,前提是它涉及同一个实例。

    【讨论】:

      猜你喜欢
      • 2013-03-05
      • 1970-01-01
      • 2015-11-27
      • 2019-05-07
      • 2013-04-03
      • 2016-12-11
      • 2015-02-11
      相关资源
      最近更新 更多