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。
相关推荐
毕设源码-朱学姐14 分钟前
【开题答辩全过程】以 4S店汽车维修保养管理系统为例,包含答辩的问题和答案
java·spring boot·汽车
盖世英雄酱581361 小时前
Read timed out问题 排查
java·数据库·后端
狼爷1 小时前
破解 JetBrains 的学生,后来都成了它的 “推销员”:一场用习惯换市场的长期战
java·jetbrains
.豆鲨包1 小时前
【Android】Viewpager2实现无限轮播图
android·java
BXCQ_xuan1 小时前
软件工程实践二:Spring Boot 知识回顾
java·spring boot·后端
老赵的博客1 小时前
c++ unqiue指针
java·jvm·c++
wuxuanok2 小时前
SpringBoot -原理篇
java·spring boot·spring
柿蒂2 小时前
从if-else和switch,聊聊“八股“的作用
android·java·kotlin
二饭2 小时前
Spring Boot 项目启动报错:MongoSocketOpenException 连接被拒绝排查日记
java·spring boot·后端
懒虫虫~2 小时前
通过内存去重替换SQL中distinct,优化SQL查询效率
java·sql·慢sql治理