java接口app如何访问权限_Java中的访问权限控制

本章精华摘录

编写一个Java源代码文件时,此文件被称为编译单元或转译单元。每个编译单元必须有一个后缀.java,而在编译单元内可以且只能有一个public类,否则编译器不会接受。如果编译单元之中还有额外的类,在包之外的世界是无法看见这些类的,因为他们不是public类,且这些类主要用于为public类提供支持

当编译一个.java文件时,.java文件中的每一个类都会有一个输出文件,该文件名称与.java每个类的名称相同,只是多了一个后缀.class。因此,在编译少量.java文件时,会得到大量的.class文件。Java可运行程序时一组可以打包并压缩为一个java文档文件的.class文件。Java负责这些文件的查找、装载和解释。

类库实际上是一组类文件,其中每个文件都有一个public类,以及任意数量的非public类,因此每个文件都有一个构件。如果希望这些构件(每一个都有独立的.java和.class文件)从属于一个群组,就可以使用关键字package。

Java访问权限修饰符

无修饰符:包访问权限

void bite(){}

//只向在包中的类提供访问权限

默认包

package access;

class Cake {

public static void main(String[] args) {

Pie x = new Pie();

x.bite();

}

}

package access;

class Pie {

void bite(){

System.out.println("yummy~o(* ̄▽ ̄*)ブ");

}

}

Pie()和f()享有包访问权限,Cake.java可以访问它们的原因是它们相处于相同的目录,并且未给自己设定任何包名称,java将这样的文件看作是隶属于该目录的默认包中,于是它们为该目录中所有其他的文件都提供了包访问权限。

ps: 经过测试,把Pie.java和Cake.java均放在src文件目录下正常运行,故可知程序即使不在package中java仍会生成默认包并运行。

public: 接口访问权限

使用关键字public,表示public后紧跟的成员声明对每个人都是可用的,例:

public void bite() {}

//方法bite()对所有人都是可用的

Cookie

package access.dessert;

public class Cookie {

public Cookie() {

System.out.println("Cookie Constructor");

}

void bite() {

System.out.println("卡滋卡滋, yummy~!");

}

}

Dinner上吃Cookie

package access;

import access.dessert.*;

public class Dinner {

public static void main(String[] args) {

Cookie x = new Cookie();

x.bite();//Error:'bite()' is not public in 'access.dessert.Cookie'. Cannot be accessed from outside package

}

}

小结:如果使用了public修饰,import后就可以访问。若不使用修饰符,由于只向所在包中的类提供访问权,故import后也无法访问。

private: 你无法访问

关键字private:除了包含该成员的类,其他任何类都无法访问这个成员。private可允许你随意修改该成员,而不必考虑是否会影响到包内其他的类。

任何可以肯定只是该类的一个“助手”方法的方法,都可以把它指定为private,以确保不会在包内的其他地方误用到它,也就防止了你会去改变或删除这个方法。将方法设为private确保你拥有这种选择权。

IceCream.java

package access;

class Sundae{

private Sundae() {}

static Sundae makeASundae(){

return new Sundae();

}

}

public class IceCream {

public static void main(String[] args) {

//!Sundae x = new Sundae();

//Error:'Sundae()' has private access in 'access.Sundae'

Sundae x = Sundae.makeASundae();

}

}

protected: 继承访问权限

如果创建了一个新包,并自另一个包继承类,那么唯一可以访问的成员就是源包的public成员。有时基类的创建者希望有某个特定成员,把对它的访问权限赋予派生类而不是所有类,这需要protected来完成这一工作。protected也提供包访问权限,相同包内的其他类也可以访问protected元素。

改进版的Cookie2

package access.cookie2;

public class Cookie {

public Cookie() {

System.out.println("Cookie Constructor");

}

protected void bite(){

System.out.println("滋个滋个啊~滋个滋个啊( ̄▽ ̄)");

}

}

ChocolateChip

package access;

import access.cookie2.*;

public class ChocolateChip extends Cookie{

public ChocolateChip() {

System.out.println("ChocolateChip Constructor");

}

public void chomp(){

bite();

}//protected method

public static void main(String[] args) {

ChocolateChip choco = new ChocolateChip();

choco.chomp();

}

}

类访问权限

如果获取了 一个access内部的类,用来完成在access中的public类所要执行的任务,如果你认为不久之后可能会想要完全改变原有方案并删除旧版本,代之以不同的版本。为了保留灵活性,需要确保客户端程序员不会依赖于隐藏在access之中的任何特定实现细节,只需将关键字public从类中拿掉,这个类就只拥有包访问权限了(只可以用于该包之中)。

类不可以是private的:这样会使类除该类之外,其他任何类均不可访问。也不可以是protected的。

注:事实上,一个内部类可以是private或protected的

故对于类的访问权限,只有包访问权限或public。如果不希望任何人对该类拥有访问权限,可以把所有的构造器指定为private,从而阻止任何人创建该类的对象。

例外:在该类的static成员内部可以创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值