java基础之权限关键字分析

访问权限修饰符

1、四个访问权限修饰符

java中给定了四个权限修饰符,分别是:public、protected、private以及默认(什么都不写)

2、定义变量

用来修饰类中变量的时候访问权限:

权限修饰符名称 本类 同包 其他包 任意位置
public
protected √(其他包中的子类) ×
默认 × ×
private × × ×

呈现出来阶梯型差异。

测试

这里直接用代码来进行演示即可:

定义类,注意包名:

package com.guang.test;

public class User {
    public int i;
    protected int j;
    int k;
    private int l;
}

测试类一:

package com.guang.test;

public class PrivilegeTest {
    public static void main(String[] args) {
        User user = new User();
        int i = user.i;
        int j = user.j;
        int k = user.k;
        // 根本就找不到,private关键字修饰的,不能够在外部使用
        // user.l;
    }
}

测试类二:

package com.guang.test1;

import com.guang.test.User;

public class PrivilegeTest {
    public static void main(String[] args) {
        User user = new User();
        int i = user.i;
        // 不同包,两个都不能访问
        // int j = user.j;
        // int k = user.k;
        // 根本就找不到
        // user.l;
    }
}

不同包的情况,可以看到protected和默认修饰符修饰的都不能够访问。

那么现在修改一下原来的类结构,创建子类,在外部包中来进行使用变量j,发现是可以使用的。

public class Person extends User {
    
    public void show(){
        int i = this.i;
        int j = this.j;
        // 直接报错
        // this.k
    }
}

所以就有了上面的结论

3、定义方法

将方法定义成为public方法时,表示的当前的方法在任意位置都可以被当前对象调用;

将方法定义成private修饰时,表示的是只能够在本类中被使用;

将方法定义成默认修饰符修饰时,表示的是只能够在同包中来进行使用;

将方法定义成protected修饰符修饰时,通常用来表示不同包中的子类需要来对其进行实现;

4、定义类

定义类的时候只能够使用public和默认的,而不要去使用protected和private。

如果使用private来修饰类,那么毫无意义,因为对于外界来说无法使用;使用protected来定义类,表示的是有保护的,也没有任何意义。

所以在定义类的时候,可以看到在大多数类中,都是使用默认或者是public来进行修饰,然后有时候还会加上static关键字来进行修饰

static关键字表示的是在类加载的时候也会跟着一起加载,final表示的不可以在类中被继承。

5、类定义推荐设置

1、所以如果当前类不想被外界使用,只想在本类中来进行使用的话,那么建议将类定义成为内部类,并且访问修饰符建议使用默认修饰符来进行操作。

2、如果当前类可以被外界来进行使用,那么首先将访问修饰符扩大,使用public;如果不想被继承,那么推荐使用final关键字来进行修饰

posted @ 2022-03-28 11:10  雩娄的木子  阅读(77)  评论(0编辑  收藏  举报