关于Java中public、protected、default、private四种访问修饰符的理解

关于Java中public、protected、default、private四种访问修饰符的理解

四种访问修饰符的介绍

public

public公共的修饰符,被public修饰的类、变量和方法在所在类,相同的包下,其他的包中都可以访问。

protected

protected被保护的修饰符,被protected修饰的类、变量和方法在所在类,相同的包下,和子类中都可以被访问。

default

default默认的修饰符,被default修饰的类、变量和方法在所在类,相同的包下可以访问。

private

private私有的修饰符,被private修饰的类、变量方法只能在所在类中访问。

四种访问修饰符的访问权限表:

在这里插入图片描述

1.同一个类下访问

package com.miao.test1;
public class One {
    public String name = "张三";            //公共修饰符修饰的变量
    protected String sex = "男";   			//被保护的修饰符修饰的变量
    String birthday="1999-09-09";   		//默认修饰符修饰的变量
    private int age = 18;   				//私有修饰符修饰的变量

//判断被任何修饰符修饰的变量在同一个类中是否可以访问,在别的类下调用show方法查看是否可以正常调用产生结果即可
    public  void show() {
        System.out.print(name+" ");
        System.out.print(sex+" ");
        System.out.print(birthday+" ");
        System.out.print(age+" ");
    }
}

2.同一个包下访问

package com.miao.test1;
public class Two {
    public static void main(String[] args) {
        One o = new One();
//---------------------------------在同一个包下访问--------------------------
		System.out.println("----------在同一个包下访问-------------------------");
        System.out.print(o.name+" ");  					//public修饰的变量可以访问
        System.out.print(o.sex+" ");	 				//protected修饰的变量可以访问
        System.out.println(o.birthday+" "); 			//default修饰的变量可以访问
       // System.out.println(o.age);  					private修饰的变量不能访问
//------------------------调用show()方法查看在本类下所有被不同修饰符修饰的变量是否可以正常访问
        System.out.println("----------------本类下被修饰的变量是否可以正常访问------------------");
        o.show();
    }
}
运行结果:

在这里插入图片描述

在同一个包下访问除了被private修饰的age,其他修饰符修饰的变量均可以正常访问,并且在同一个类下所有修饰符修饰的变量都可以正常访问到。

因此:在同一个包下private修饰的类、变量、方法能在本类中访问,不能在其他类中访问。
在同一个包下public、protected、default修饰的类、变量、方法能在本类和其他类中访问。

3.不同的包下的子类访问

package com.miao.test2;
import com.miao.test1.One;
public class Three extends One{
    public static void main(String[] args) {
        Three three= new Three();
//---------------------------------在不同的包下的子类访问--------------------------
        System.out.println("----------在不同的包下的子类访问-------------------------");
        System.out.print(three.name+" ");  					//public修饰的变量可以访问
        System.out.print(three.sex+" ");   					//protected修饰的变量可以访问
        //System.out.println(three.birthday+" "); 			默认修饰符修饰的变量不能访问
        //System.out.println(three.age);    				private修饰的变量不能访问
    }
}

运行结果:

在这里插入图片描述
在不同的包下的子类访问只有public和protected修饰的类、变量、方法能够访问。

因此:在同一个包下private修饰的类、变量、方法只能在本类中访问,不能在同一个包下的其他类中和不同包下的子类中访问。
default修饰的类、变量、方法能在同一个包下的类中访问,不能不同的包的子类下访问。
public、protected修饰的类、变量、方法能在同一个包下的类、不同包下的子类中访问。

4.不同的包下访问

package com.miao.test2;
import com.miao.test1.One;
public class Four {
    public static void main(String[] args) {
        One o = new One();
//---------------------------------在不同的包下访问--------------------------
        System.out.println("----------在不同的包下访问-------------------------");
        System.out.print(o.name+" ");  					//public修饰的变量可以访问
        // System.out.print(o.sex+" ");    				protected修饰的变量不能访问
        //System.out.println(o.birthday+" "); 			默认修饰符修饰的变量不能访问
        //System.out.println(o.age);    				private修饰的变量不能访问
    }
}

运行结果:

在这里插入图片描述

最终结论:

private修饰的类、变量、方法只能在本类中访问。
default(默认修饰符)修饰的类、变量、方法能在同一个包下的类中访问。
protected修饰的类、变量、方法能在同一个包下的类和不同的包下的子类中访问,但不能在不同的包下访问。
public修饰的类、变量、方法能以上的所有情况下访问。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值