java语言中访问权限控制符_Java基础--访问权限控制符

今天我们来探讨一下访问权限控制符。

使用场景一:攻城狮A编写了ClassA,但是他不想所有的攻城狮都可以使用该类,应该怎么办?

使用场景二:攻城狮A编写了ClassA,里面有func1方法和func2方法,但是他只想提供func1给别的攻城狮使用,应该怎么办?

此时,应该使用Java当中的访问权限控制符:1、默认访问权限 2、public 3、private 4、protected

注意,上述四种访问权限,只有默认访问权限和public能够用来修饰类。修饰类的变量和方法四种权限都可以。(本处所说的类针对的是外部类,不包括内部类)

1、修饰类

默认访问权限:表示在同一包中其他类都可以访问该类。

public:表示任何一个类都可以访问该类。

例子1:

People.java

packagetest1;classPeople {//默认访问控制符

String name;publicPeople(String name) {this.name =name;

}publicString getName(){return this.name;

}

}

Main.java

packagetest1;public classMain {public static voidmain(String[] args) {

People p= new People("攻城狮");

System.out.println(p.getName());

}

}

实验结果:

a2f54e69b4dda600ebd02fa71d75bb87.png

可以正常输出结果[攻城狮]。因为People类使用的是默认访问修饰符,在同一个包里面可以访问,而Main.java与People.java在同一包,所以能访问。

例子2:

修改Main.java:把Main类放置在别的包中,会有什么情况出现呢?

5a364ed63005416dd3f3df9aa98df06d.png

line2提示:People类不可见,即找不到的意思。People.java使用默认访问修饰符,只能提供给同包的类来访问,而现在Main.java放在了test2包中,而People.java是test1包的,所以在不同包是不能放到默认访问修饰符类的。

2、修饰类的方法和变量

默认访问权限(包访问权限):如果类的变量和方法使用默认访问权限,就意味着只能在同包的类中可以访问到类的方法和变量,而不同包的类则不能访问类的方法和变量。

private:如果一个类的方法和变量使用privagte来修饰,则只能提供给本类访问,其他类不能访问。

protected:如果一个类的方法和变量使用protected来修饰,既能提供本类访问,又能提供给不同包继承于此类的类访问方法和变量。

public:如果一个类的方法和变量使用public来修饰,则任意类能访问方法和变量。

下面通过一下例子来说明问题:

例子3:

People.java与Main.java位于同类

People.java

packagetest1;classPeople {//默认访问控制符

String name;publicPeople(String name) {this.name =name;

}

String getName(){//默认访问控制符

return this.name;

}

}

Main.java

packagetest1;public classMain {public static voidmain(String[] args) {

People p= new People("攻城狮");

System.out.println(p.getName());

}

}

此例子能正常运行,主要想测试一下默认修饰符修饰getName(),在同包的类中能正常访问。

如果此时,把Main.java放于不同的包中,查看能否正常运行?

People.java

packagetest1;classPeople {//默认访问控制符

String name;publicPeople(String name) {this.name =name;

}

String getName(){//默认访问控制符

return this.name;

}

}

Main.java

f46f3d326f2b9565776d7911064593ab.png

提示,在不同包中,是查看不了使用默认访问控制符修饰的方法。

例子4:

People.java

packagetest1;public classPeople {

String name;publicPeople(String name) {this.name =name;

}protectedString getName(){//protected控制符

return this.name;

}

}

Main.java

f46f3d326f2b9565776d7911064593ab.png

提示,在不同包中,是查看不了使protected控制符修饰的方法。

编写一个Man类继承于People类

Man.java

packagetest2;importtest1.People;public class Man extendsPeople {publicMan(String name) {super(name);

}public voidprintName(){

System.out.println(this.getName());

}

}

Main.java

packagetest2;importtest1.People;public classMain {public static voidmain(String[] args) {//People p = new People("攻城狮");//System.out.println(p.getName());

Man m= new Man("工程湿");

m.printName();

}

}

Man类继承于People类,则Man类中可以访问到People类中protected修饰的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值