今天我们来探讨一下访问权限控制符。

使用场景一:攻城狮A编写了ClassA,但是他不想所有的攻城狮都可以使用该类,应该怎么办?

使用场景二:攻城狮A编写了ClassA,里面有func1方法和func2方法,但是他只想提供func1给别的攻城狮使用,应该怎么办?

此时,应该使用Java当中的访问权限控制符:1、默认访问权限 2、public 3、private 4、protected

注意,上述四种访问权限,只有默认访问权限和public能够用来修饰类。修饰类的变量和方法四种权限都可以。(本处所说的类针对的是外部类,不包括内部类)

1、修饰类

默认访问权限:表示在同一包中其他类都可以访问该类。

public:表示任何一个类都可以访问该类。

例子1:

People.java

package test1;

class People {
//默认访问控制符
String name;
public People(String name) {
this.name = name;
} public String getName(){
return this.name;
}
}

Main.java

package test1;

public class Main {

    public static void main(String[] args) {
People p = new People("攻城狮");
System.out.println(p.getName());
} }

实验结果:

可以正常输出结果[攻城狮]。因为People类使用的是默认访问修饰符,在同一个包里面可以访问,而Main.java与People.java在同一包,所以能访问。

例子2:

修改Main.java:把Main类放置在别的包中,会有什么情况出现呢?

line2提示:People类不可见,即找不到的意思。People.java使用默认访问修饰符,只能提供给同包的类来访问,而现在Main.java放在了test2包中,而People.java是test1包的,所以在不同包是不能放到默认访问修饰符类的。

2、修饰类的方法和变量

默认访问权限(包访问权限):如果类的变量和方法使用默认访问权限,就意味着只能在同包的类中可以访问到类的方法和变量,而不同包的类则不能访问类的方法和变量。

private:如果一个类的方法和变量使用privagte来修饰,则只能提供给本类访问,其他类不能访问。

protected:如果一个类的方法和变量使用protected来修饰,既能提供本类访问,又能提供给不同包继承于此类的类访问方法和变量。

public:如果一个类的方法和变量使用public来修饰,则任意类能访问方法和变量。

下面通过一下例子来说明问题:

例子3:

People.java与Main.java位于同类

People.java

package test1;

class People {
//默认访问控制符
String name;
public People(String name) {
this.name = name;
} String getName(){
//默认访问控制符
return this.name;
}
}

Main.java

package test1;

public class Main {

    public static void main(String[] args) {
People p = new People("攻城狮");
System.out.println(p.getName());
} }

此例子能正常运行,主要想测试一下默认修饰符修饰getName(),在同包的类中能正常访问。

如果此时,把Main.java放于不同的包中,查看能否正常运行?

People.java

package test1;

class People {
//默认访问控制符
String name;
public People(String name) {
this.name = name;
} String getName(){
//默认访问控制符
return this.name;
}
}

Main.java

提示,在不同包中,是查看不了使用默认访问控制符修饰的方法。

例子4:

People.java

package test1;

public class People {
String name;
public People(String name) {
this.name = name;
} protected String getName(){
//protected控制符
return this.name;
}
}

Main.java

提示,在不同包中,是查看不了使protected控制符修饰的方法。

编写一个Man类继承于People类

Man.java

package test2;

import test1.People;

public class Man extends People {

    public Man(String name) {
super(name);
} public void printName(){
System.out.println(this.getName());
} }

Main.java

package test2;
import test1.People; public class Main { public static void main(String[] args) {
//People p = new People("攻城狮");
//System.out.println(p.getName()); Man m = new Man("工程湿");
m.printName();
} }

Man类继承于People类,则Man类中可以访问到People类中protected修饰的方法。

最新文章

  1. eclipse打包apk
  2. 通过XHR  API来下载和上传图片
  3. JavaScript String(字符串)对象 实例
  4. 解决wamp mysql数据库出现乱码的问题。
  5. HDU 1561The more, The Better(树形DP)
  6. poj3273 二分
  7. Web软件开发工具WebBuilder试用手记
  8. AJAX在Struts2中使用
  9. 面向对象+canvas 倒计时
  10. python中configparser模块记录
  11. ImageNet Classification with Deep Convolutional Neural Networks(译文)转载
  12. RAID与其在Linux上的实现
  13. postgresql主从配置
  14. PHP类继承、接口继承关系概述
  15. 单一事件中心管理组件通信( vuex )
  16. 练习:自己写一个容器ArrayList集合 一一数组综合练习2
  17. swift - UIPickerView 的使用
  18. Go基础---->go的基础学习(一)
  19. Object 和 JSON 区别联系
  20. Linux ping命令详解

热门文章

  1. 编译安装-Nginx
  2. 获取和设置localStorage
  3. css 文字超出变 ... 点点点
  4. PageValidate 类
  5. 【转】Python字符编码详解
  6. linux 源码编译(转)
  7. bzoj 1026 [SCOI2009]windy数 数位dp
  8. jq获取表单值与赋值代码
  9. 【JavaScript】关于javascript原型的深入理解
  10. 【JavaScript】HTML5/CSS3实现五彩进度条应用