Java初学者有时会被protected的用法和意义搞糊涂.如上所述,protected修饰符创建了一个允许他的包和其他包中的子类访问的成员.这样protected成员可以被所有的子类使用,但是仍旧可以拒绝包外的代码随意访问.
为了更好的理解protected的作用,让我们通过一个例子来说明.首先,修改
public class test2 { // @param args public static void main(String args[]) { extBook b = new extBook(); b.title = "title"; b.author = "author"; } } class book { protected String title; protected String author; } class extBook extends book { int price; }
首先看一下extBook的代码,由于extBook扩展了book,因此即使extBook位于不同的包中,他也可以访问Book中的protected成员.因为他可以直接访问title,author.
问:我知道C++中也有protected访问修饰符,他与Java中的类似吗?
答:类似,但是不相同.在C++中,protected创建的成员可以由子类访问,但是对于非子类是私有的.在Java中,protected创建的成员可以由包中的任何代码访问,但是包外只能由子类访问.在C++和Java之间移植代码时应该注意这一区别.