类成员访问控制符:public、protected、friendly、private 在这里进行一个透彻些的讲述

本文详细解析了Java中public、protected、friendly(包级访问)和private四种访问控制符的作用范围及应用场景,通过示例展示了同一包内及不同包间类成员的访问规则。

我们知道在java中,对于类中的成员共有四种访问控制符:public,protected、friendly(空白不写出任何关键字)、private。但是在刚接触java时,我们并不知道这四个访问控制符的具体含义和这四个访问控制符到底是怎样进行访问控制的。

先进行对这四个访问控制符的权限具体说明:


现在具体解释:

1.

package cn.test;

class Demo

{

public void f1(){}

protected void f2(){}

void f3(){}

private void f4(){}

}

package cn.test;

class Test

{

public static void main(String[]args)

{

Demo d=new Demo();

d.f1();//ok

d.f2();//ok

d.f3();//ok

d.f4();//error

}

}

对上面例子的解释:上述两个类Test和Demo,都处于同一个包中cn.test(注:当两个类都没有明显的写出package 包名,那么这两个类默认示为在同一个默认包中).

当在Test类中要对Demo类中的方法进行调用时,那么就必须要先产生Demo类的对象实例来对非静态的方法来进行调用,当成员是静态时也可以用类名.成员名来直接进行调用

而不用产生对象。

回到正题,public 、prtotected、friendly、private这四个访问控制字只能作用于当另外一个类要调用另一个类被这四个访问控制字所修饰的成员时,这四个关键字的访问控制才会起作用。而对于在类中,方法之间的调用不受这四个访问控制的限制,这一点必须知道。

当两个类处于同一个包中,在我们的例子中,Test类想要使用Dmeo类的四个方法,那么就要受到方法的访问控制字的限制。对于Dmeo类的private方法,在类外,Demo类的对象是不能对其进行调用的,只能由Demo类中的内部成员才能调用。

2、

package cn.test2;

class Demo

{

public void f1(){}

protected void f2(){}

void f3(){}

private void f4(){}

}

package cn.test;

class Test

{

public static void main(String[]args)

{

Demo d=new Demo();

d.f1();// public   ok

d.f2();//protected   error

d.f3();// friendly   error

d.f4();//private   error

}

}


解释:上述两个类Demo和Test在两个不同的包中cn.test2和cn.test。情况又会变得不同。

3、

package cn.test2;

class Demo

{

public void f1(){}

protected void f2(){}

void f3(){}

private void f4(){}

}

package cn.test;

class Test  extends Demo

{

public static void main(String[]args)

{

Demo d=new Demo();

d.f1();// public   ok

d.f2();//protected   error

d.f3();// friendly   error

d.f4();//private   error

}

public void  print()

{

f2();//protected ok

}

}


上面我们举了三个例子,分别是:

a,两个类在同一个包中:


Test类可以利用newDemo()产生对象实例,调用Dmeo类的public、protected、friendly 成员(包括类的成员方法和类的成员变量)


b.两个类不在同一个包中


Test类可以利用newDemo()产生对象实例,调用Dmeo类的public成员(包括类的成员方法和类的成员变量)


c.两个类不在同一个包中,但是Test却继承了Demo类


Test类可以利用newDemo()产生对象实例,调用Dmeo类的public(包括类的成员方法和类的成员变量),但是因为Test类继承了Demo类,所有Test类内部方法之间可以调用f2()方法,或Test类的对象也可以对f2()方法调用。但是注意:Demo类在Test类中new产生的对象实例还是不能调用protected  f2()方法。

public: 可以被所有的类访问

protected:可以被同一个包中的类访问,也可以被处于不同的包中的类访问,但是这个类必须得其进行继承才能使用。

friendly:只能被同一个包中的类访问。

private:只能被本类的成员之间进行访问,本类的对象也不能访问。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值