访问权限分为
public:共有的,可供所有类访问在那都可以访问,这个就不写代码演示了。
default
默认的修饰符,同一个包内可以访问
同包情况:
package com.test.ThinkInJava.access;
public class TestAccess {
String s="";//默认修饰 defualt修饰的 s变量
public TestAccess() {
}
void testAccess(){//默认修饰符 defualt修饰的方法
System.out.println("TestAccess------------"+s);
}
}
测试代码:
package com.test.ThinkInJava.access;
public class AccessMain {
public AccessMain() {
}
public static void main(String[] args) {
TestAccess test=new TestAccess();
test.s="测试defualt访问权限--同包";//同包中修改变量s的值
test.testAccess();//同包调用defualt修饰的方法
}
}
输出结果:
**TestAccess————测试defualt访问权限–同包
**
不同包情况:
报错信息是:TestAccess.s在这个区域是不可见的,提示方法也是不可见的,
protected
被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
实例:
package com.test.ThinkInJava.access;
public class TestAccess {
protected String s="";
public TestAccess() {
}
protected void testAccess(){
System.out.println("TestAccess------------"+s);
}
}
测试代码:
package com.test.ThinkInJava.access;
public class AccessMain {
public AccessMain() {
}
public static void main(String[] args) {
TestAccess test=new TestAccess();
test.s="测试protected访问权限--同包";
test.testAccess();
}
}
输出结果:
TestAccess————测试protected访问权限–同包
不同包情况跟defualt情况是相同的,也是不可见的。
不同包的子类:程序稍做修改TestAthPackage继承与TestAccess在TestAthPackage就可以访问其父类的属性与方法。
package com.test.ThinkInJava.access.othPackage;
import com.test.ThinkInJava.access.TestAccess;
public class TestAthPackage extends TestAccess {//继承父类
public TestAthPackage() {
}
public static void main(String[] args) {
TestAthPackage test=new TestAthPackage();//创建本类对象
test.s="测试defualt访问权限--非同包";//多态调用其父类protected属性(多态后续会有讲解)
test.testAccess();//调用父类protected方法
}
}
输出结果:
TestAccess————测试defualt访问权限–非同包
private
私有的, Java语言中对访问权限限制的最窄的修饰符,可以修饰内部类和变量,可以修饰非静态方法。修饰的变量与方法是不可被继承的
修饰内部类
public class TestAccess {
public TestAccess() {
}
public void testAccess(){
AccessSon son=new AccessSon();
son.s="AccessSon的s变量";
son.test();
}
private class AccessSon{//private 修饰的内部累
public String s;//公有属性
private void test(){//私有方法
System.out.println("AccessSon--------"+s);
}
}
}
测试程序
public class AccessMain {
public AccessMain() {
}
public static void main(String[] args) {
TestAccess test=new TestAccess();
test.testAccess();
}
}
输出结果:
AccessSon——–AccessSon的s变量
内部类的私有方法只能在外部类中通过内部类对象调用,不能在其他类中直接创建私有内部类,
网上找的一个对照表,如下:
更多文章请扫码关注微信公众号。

被折叠的 条评论
为什么被折叠?



