JAVA 的四种访问权限

在Java编程中,访问权限是非常重要的概念,因为它可以保证代码的安全性和封装性。访问权限有四种,分别是public、protected、default和private。


private:如果一个类的方法或者变量被private修饰,那么这个类的方法或者变量只能在该类本身中被访问,在类外以及其他类中都不能显示地进行访问。

default默认访问权限):如果一个类的方法或变量被包访问权限修饰,也就意味着只能在同一个包中的其他类中显示地调用该类的方法或者变量,在不同包中的类中不能显示地调用该类的方法或变量。

protected:如果一个类的方法或者变量被protected修饰,对于同一个包的类,这个类的方法或变量是可以被访问的。对于不同包的类,只有继承于该类的类才可以访问到该类的方法或者变量。

public:被public修饰的方法或者变量,在任何地方都是可见的。

private

java 复制代码
package com.ymqx.访问权限;

public class Person {
    private String name = "test";

    public String getName(){
        //只能在本类中被访问
        System.out.println(this.name);
        return this.name;
    }
}
java 复制代码
package com.ymqx.访问权限;

public class Test {
    public static void main(String[] args){
        Person person = new Person();

        //Person类外不能直接访问
        //System.out.println(person.a);
        person.getName();
    }
}

输出:test

方法或者变量被private修饰,只能在本类中被访问。

default

java 复制代码
package com.ymqx.访问权限;

public class Person {
    String name = "test";

    public String getName(){
        System.out.println(this.name);
        return this.name;
    }
}
java 复制代码
package com.ymqx.访问权限;

public class Test {
    public static void main(String[] args){
        Person person = new Person();

        //同一个包中的其他类中显示地调用
        System.out.println(person.name);
        person.getName();
    }
}

输出:
test
test

同一个包中的其他类中显示地调用。

java 复制代码
package com.ymqx.访问权限2;

import com.ymqx.访问权限.Person;

public class Test{
    public static void main(String[] args){
        Person person = new Person();

        //不同的包,Person类不能显示地调用name
        System.out.println(person.name);
        person.getName();
    }
}

不同包中的类中不能显示地调用。

protected

java 复制代码
package com.ymqx.访问权限;

public class Person {
    protected String name = "test";

    public String getName(){
        System.out.println(this.name);
        return this.name;
    }
}
java 复制代码
package com.ymqx.访问权限2;

import com.ymqx.访问权限.Person;

public class Zi extends Person {
    public void getPersonName() {
        //不同的包,继承可以访问父类protected修饰变量
        System.out.println(super.name);
    }
}

不同包的类,只有继承于该类的类才可以访问到该类 protected 修饰方法或者变量。

public

java 复制代码
package com.ymqx.访问权限;

public class Person {
    public String name = "test";

    public String getName(){
        System.out.println(this.name);
        return this.name;
    }
}
java 复制代码
package com.ymqx.访问权限2;

import com.ymqx.访问权限.Person;

public class Test{
    public static void main(String[] args){
        Person person = new Person();

        //同一个包中的其他类中显示地调用
        System.out.println(person.name);
        person.getName();
    }
}

输出:
test
test

不同包中的类也可以显示地调用。

小结

  • 四种访问权限从小到大:private < default(默认访问权限)< protected < public。
  • 当定义变量时不加任何修饰会默认为默认权限。
  • 在子类中访问父类中的变量时需要用super。
相关推荐
prince051 小时前
用户积分系统怎么设计
java·大数据·数据库
96773 小时前
理解IOC控制反转和spring容器,@Autowired的参数的作用
java·sql·spring
SY_FC3 小时前
实现一个父组件引入了子组件,跳转到其他页面,其他页面返回回来重新加载子组件函数
java·前端·javascript
耀耀_很无聊4 小时前
09_Jenkins安装JDK环境
java·运维·jenkins
ノBye~4 小时前
Centos7.6 Docker安装redis(带密码 + 持久化)
java·redis·docker
黑臂麒麟4 小时前
openYuanrong:多语言运行时独立部署以库集成简化 Serverless 架构 & 拓扑感知调度:提升函数运行时性能
java·架构·serverless·openyuanrong
XiaoLeisj4 小时前
Android Jetpack 页面架构实战:从 LiveData、ViewModel 到 DataBinding 的生命周期管理与数据绑定
android·java·架构·android jetpack·livedata·viewmodel·databinding
⑩-4 小时前
为什么要用消息队列?使用场景?
java·rabbitmq
似水明俊德4 小时前
01-C#.Net-泛型-面试题
java·开发语言·面试·c#·.net
Allnadyy4 小时前
【C++项目】从零实现高并发内存池(一):核心原理与设计思路
java·开发语言·jvm