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

使用场景一:攻城狮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修饰的方法。

Java基础--访问权限控制符的更多相关文章

  1. Java基础—访问权限控制

    Java中访问权限控制的作用: 为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分. 为了让类库设计者可用更改类的内部工作方式,而不 ...

  2. 006-Java的访问权限控制符和包导入机制

    目录 一.Java的访问权限控制符 一.访问控制符的作用 二.访问控制符的分类 二.Java的包导入机制 一.为什么要使用package? 二.package怎么用? 三.对于带有package的ja ...

  3. java:访问权限

    访问权限四大类:权限从大->小 1.public:   公共权限 2.protected:  受保护权限 3.default: 包级别访问权限/默认权限 4.private:   私有权限 以p ...

  4. 【Java_基础】Java的访问权限控制

    1.类成员的访问权限控制 Java中类成员的访问权限分为四类:private,无(默认情况下),protected和public.其权限控制如下表所示: 修饰词 本类 同一个包的类 继承类 其他类 p ...

  5. java的访问权限

    Java语言中有4中访问修饰符:friendly(默认).private.public和protected. public :能被所有的类(接口.成员)访问. protected:只能被本类.同一个包 ...

  6. java 类访问权限

    Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符. private: Java语言中对访问权限限制的最窄的修饰符,一般 ...

  7. Java的访问权限详解(3+1)public private protected default

    Java使用三个关键字在类的内部设定访问权限:public.private.protected.这些访问指定词(access specifier)决定了紧跟其后被定义的成员(方法或属性)可以被谁使用. ...

  8. Java基础 -- 访问控制权限

    一  包:库单元 假设我们存在两个类名相同的类,如果没有一定的措施对其进行区分,就会无法区别到底使用的是哪一个类.因此java引入了包来进行名字空间管理. 包(类库)包含有一组类,这些类在单一的名字空 ...

  9. java 的访问权限控制

    package test06; public class PermissionModel { private int age; public String name; public int getAg ...

随机推荐

  1. PHP 打印调用函数入口地址(堆栈),方便调式

    今天网站出现一个BUG,然后直接在数据库类里面写日志,看是哪条SQL出了问题,SQL语句到是找到了,但是不知道这条SQL语句来自何处,于是就想啊,如果能有一个办法,查看当前正在运行的这个方法是被哪个方 ...

  2. Keil MDK AGDI Drivers, ULink, JLink, ST-Link, NuLink, JTAGjet

    AGDI Drivers AGDI is an Application Program Interface (API) third-party developers can use to create ...

  3. Swift学习笔记十一

    类与结构体 Swift中,并不要求把自定义类或结构的接口和实现写在不同的文件中.你在一个文件中定义类或结构体,那么这个类或结构体的外部接口就自动可以在其他代码中使用了. 类和结构有很多相似和区别,相同 ...

  4. C# udpclient 发送数据断网后自动连接的方法

    需求 有一个winform程序, 用来调试路由器和对路由器吞吐量进行测试 需要后台不断的接收来自udp服务器端的数据,同时要发送数据到服务器端(无线路由器) 设计时候,通过一个线程,for(;;)死循 ...

  5. Codeforces Round #264 (Div. 2) C

    题目: C. Gargari and Bishops time limit per test 3 seconds memory limit per test 256 megabytes input s ...

  6. Some tips on using HashSet<T> and List<T>

    This article is written based on my colleague's review Most of the times, when I want to use a colle ...

  7. range与xrange之间的差异(转)

    range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列.range示例: >>> ra ...

  8. Python中的注释(转)

    一.单行注释     单行注释以#开头,例如:     print 6 #输出6 二.多行注释     (Python的注释只有针对于单行的注释(用#),这是一种变通的方法)      多行注释用三引 ...

  9. Effective_java之二:慎用重载函数

    每周写一篇技术博客的愿望一直没实现, 从这周開始每周五晚10点是写博客的时间 OOP的一个重要特性就是多态,实现多态的目的有多种途径.比方:重载overload.重写overwite.面向接口编程等等 ...

  10. birt 批改导出的文件名【转】

    birt 修改导出的文件名 birt 修改导出的文件名分两种实现方法, 第一种:修改 web.xml 中 配置的 BIRT_FILENAME_GENERATOR_CLASS <!-- Filen ...