0

谁能解释一下为什么我们需要“受保护”这个词?如果我理解正确,

默认访问:在同一包内的类中可用。

受保护的访问:同一包中的默认访问 + 可用于任何包中的继承类(子类)。基本上,我们在同一个包中获得相同的默认访问权限。

那么我应该什么时候使用它呢?只是为了你的代码风格?要标记它,您将从继承的角度使用它?
谢谢你。

package firstPack;

public class First {
    protected int a;
    protected void Chat(){
        System.out.println("Here I am");
    }
}

package secondPack;  

import firstPack.First;

public class Second extends First{
    public static void main(String [] args){
        First f=new First();
//      f.Chat();
//      System.out.println(f.a);
    }
}

我用这段代码来测试它。它没有用。

4

3 回答 3

2

protected意味着对所有子类可见,而不仅仅是同一个包中的子类。

于 2013-10-16T19:08:10.657 回答
0

protected修饰符:由同一个包中的其他类引用它们的类的任何子类(即同一个包或不同的包)访问。

参考

在此处输入图像描述

于 2013-10-16T19:10:07.163 回答
0

您的测试代码的问题是您试图通过类引用访问First 类实例的受保护成员。First请注意,由于Second类与一个类不在同一个包中,First因此它无法访问基类的任何实例的受保护字段,但可以访问从类继承的自己的字段First(包括protected那些)。所以像

First f = new First();
f.chat();//chat is protected in base class.

不会在Second课堂上编译,但类似

public void test() {
    a = 1;  // have access to inherited protected field or 
    chat(); // methods of base class 
}

public static void main(String[] args) {
    Second f = new Second();
    f.chat();
    System.out.println(f.a);
}

可以,因为 Second class 可以访问其继承的成员。

请注意,main方法中的代码之所以有效,是因为它被放置在Second类中,因为只有派生类或同一个包中的类First才能访问其受保护的成员。因此,如果此代码将放置在其他类中,例如

class Test{
    public static void main(String[] args) {
        Second f = new Second();
        f.chat();
        System.out.println(f.a);
    }
}

它不会编译(不能访问受保护的成员,因为Test它没有扩展或不在同一个包中First)。

于 2013-10-16T19:40:44.047 回答