JAVA初级(十二)对象之权限修饰符

权限修饰符是什么?有哪些?

权限修饰符,通俗点来说就是访问和使用,不同的权限范围不一样
权限修饰符有:public,private,protected,default

权限修饰符怎么写?

权限修饰符直接写在在类的最前面,方法的最前面,全局变量的最前面就行
默认不写就是default
默认不写就是default. 如果你想要显示的写出default 则要在接口或者switch中才能写.
这边你写default void fun(){}会报错
类(即第一行的那个class)只能用public来修饰

什么时候用哪个好点?

public

public是范围最大的.只要是用这个修饰符修饰的东西.那么在这个项目中哪里都能范围到.
在这里插入图片描述
上面的那个在model包里,下面的在service包底下的又一个小包中.
但是底下的那个SerialNumberService里面用public以外的东西修饰.上面那个RequestResult就访问不到了.
所以如果你想要某一个方法,某一个变量要所有人都能用,那么你就用Public修饰
public是用的最多的权限修饰符

private

private是访问最小的,它不能修饰类,也就是不能private class 这样写,不然报错.
它只能写在方法和变量的最前面.

private int num = 0;
private int getNum(){}

类似这样写.
被private修饰的东西只能在当前这个类用.通俗点就是只能有在当前这个.java文件用.
在这里插入图片描述
在messageConstant里用private修饰的东西只能在messageConstant里使用
所以如果你想要某个方法或者变量只在当前这个文件内使用,它永远不会被别的java文件需要.那么你就用private修饰
当然,如果某一天,你要这个方法或者变量为别的java文件使用.private改成public就行啦

default

当方法,或成员变量不写权限修饰符时,它的权限修饰符就是default,default同样不能写在类前面,即default class 这样会报错
但是class能被default修饰. 即直接写class 名称是不会报错的
default的范围如何?这个包内的所有类都能用,
在这里插入图片描述
比如在BaseConstant写一个 void fun(){} 用default修饰的方法.
那么它只有底下两个在同一个包里的MessageConstant和OrderStutusConstant能够使用,
在另外一个包里的AppVersionController就用不到了
方法和变量默认不写就是default,但如果我偏要写呢?
你会发现default void fun(){}你这样写它会报错.没错就是不给你写.
但它确实是一个存在的关键字.
但什么时候能写default呢?
使用switch时能写,这个default表示所有条件不符合时执行
接口中定义default时,必须写.否则报错
所以,什么时候用default?
1,你要它只能在当前这个包内用时,永远不会别被的包内的类使用,用default.
2,使用switch时,所有条件都不符合时执行的代码,用default

default的使用比较少.

protected

protected访问范围
1,包内可见
2,继承可见,子类直接从父类继承下来的protected方法可见.但父类实例的protected的方法不可见.即

package package1;
public class Father { protected void fun(){}}

package package2;
public class Child extend Father{ 
	public void test(){
		Father father = new Father();
		father.fun();//报错
		fun();//编译通过
	}
}

同样,protected不能修饰class,即protected class会报错
protected用的不多

在你要使用protected方法前.分析一下它的来源(来自那个包)。就能够确定它的可见范围

看一下以下几个例子,来了解下protected的可见性

package package1;
public class Father { protected void fun(){}}

package package1;
public class Child1 extend Father{}

package package1;
public class Child2 extend Father{}

package package1;
public class Text1{ 
	public void test(){
		Child1 child1 = new Child1();
		Child2 child2 = new Child2();
		child1.fun();//通过
		child2.fun();//通过
	}
}
package package2;
public class Text2{ 
	public void test(){
		Child1 child1 = new Child1();
		Child2 child2 = new Child2();
		child1.fun();//错误
		child2.fun();//错误
	}
}

fun()方法来自Father 所以Father的子类以及其同一个包里的类可见
Test1类与Father在同一个包内,所以可见。两个Child实例可以访问fun()方法
对与Test2中的fun()方法,它在Child1和Child2类是可见的.但对Text2不可见.所以编译错误

更多的例子可查看菜鸟教程的
http://www.runoob.com/w3cnote/java-protected-keyword-detailed-explanation.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值