“6.2 Java访问权限修饰词”,该小节讲到了private、protected、包和public这几个修饰符的概念以及区别,在这里还是希望通过之前的提到的描述来学习这些内容。
(1)public:可以被所有其他类所访问。
(2)private:只能被自己访问和修改。
(3)protected:自身,子类及同一个包中类可以访问。
(4)default(默认):同一包中的类可以访问,声明时没有加修饰符。
首先public的访问控制权限不需要借助例子来说明其使用,只要通过public修饰的类或者方法或者属性,不管在什么地方,均可以被使用。下面就private,proected和包访问权限举几个例子来讲解一下,也是本小节内容的例子。
“6.2.3 private:你无法访问”,关键字private的意思是,除了包含该成员的类外,其他任何类都无法访问这个成员。
classSundae { privateSundae() {} staticSundaemakeASundae() { returnnewSundae(); } } publicclassIceCream { publicstaticvoidmain(String[] args) { //! Sundae x = new Sundae(); Sundaex=Sundae.makeASundae(); } }
///:~
这个private的例子包含了一定的单例模式的思想,你不能通过new Sundae();的方式创建对象,因为构造函数是private的,该类只提供了静态的makeASundae()间接的创建对象。
“6.2.4 protected:继承访问权限”,当前虽然没有专门的介绍继承的概念,但是需要使用protected的权限演示,还是需要提前学习一下继承的概念。可以简单通过extends关键字来体会一下,比如:
class Foo extends Bar {
这种写法就可以理解为Foo继承Bar。下面直接举一个使用protected的例子:
packageaccess.cookie2; publicclassCookie { publicCookie() { System.out.println("Cookie constructor"); } protectedvoidbite() { System.out.println("bite"); } } importaccess.cookie2.*; publicclassChocolateChip2extendsCookie { publicChocolateChip2() { System.out.println("ChocolateChip2 constructor"); } publicvoidchomp() { bite(); } // Protected method publicstaticvoidmain(String[] args) { ChocolateChip2x=newChocolateChip2(); x.chomp(); } }
/* Output:
Cookie constructor
ChocolateChip2 constructor
bite
*///:~
上面代码中的protected void bite()就将bite()方法定义为了protected访问权限,只有这个方法所属类的继承类有权限使用,当然自己类内部也是可以使用的。
最后一种默认包权限的例子就不举具体的例子了,只要是在同一个包下的不是私有和protected修饰符修饰的类和方法均可以被访问到。