有人能解释我为什么需要“受保护”这个词? 如果我理解正确,
默认访问:在同一个包中的类中可用。
受保护的访问权限:相同包中的默认访问权限+可用于继承的类 (子类)在任何包中。基本上,我们得到相同的 同一个包中的默认访问权限。
那我什么时候应该使用它?只是为了代码的风格?从继承的角度来标记你将使用它吗? 谢谢。
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);
}
}
我用这段代码来测试它。它不起作用。
答案 0 :(得分:2)
protected
表示所有子类都可见,而不仅仅是同一个包中的子类。
答案 1 :(得分:0)
protected
修饰符:相同包中的其他类或其他类访问
引用它们的类的子类(即相同的包或不同的包)。
参考的
答案 2 :(得分: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);
}
没关系,因为第二类可以访问其继承的成员。
请注意main
方法中的代码只能放在Second
类中,因为只有与First
相同的包中的派生类或类才能访问其受保护的成员。因此,如果此代码将放在其他类中,如
class Test{
public static void main(String[] args) {
Second f = new Second();
f.chat();
System.out.println(f.a);
}
}
它将无法编译(无法访问受保护的成员,因为Test
未扩展或与First
不在同一个包中。)