Java的访问修饰符

JAVA学习网 2020-03-28 13:51:02

  修饰符用来定义类、方法或者变量,通常放在语句的最前端。Java中有访问修饰符和非访问修饰符。其中访问修饰符有 public、protected 、default 、 private 四个。下面依照同包同类、同包不同类、同胞继承类、不同包继承类、不同包不继承类几个关系来验证修饰符权限。

public

 同包同类

package package01;
/**
 * 被测试类
 */
public class Person {
    public int age = 10;
    public int getAge() {
        return age;
    }
    public Person() {
    }

    public static void main(String[] args){
        Person person = new Person();
        System.out.print(person.age);
    }
}
//运行结果:10

 同包不同类且无继承关系

package package01;
/**
 * 同包不同类
 */
public class Student {

    public static void main(String[] args){
        Person person = new Person();
        System.out.print(person.age);
    }
}
//运行结果:10

 同包子类

package package01;
/**
 * 同包继承类
 */
public class Child extends Person {
    public static void main(String[] args){
        Person person = new Person();
        System.out.print(person.age);
    }
}
//运行结果:10

 不同包不同类且无继承关系

package package02;
/**
 * 不同包不同类 - 此时要导入被测类 import package01.Person;
 */
import package01.Person;
public class Man  {
    public static void main(String[] args){
        Person per =  new Person();
        System.out.print(per.age);
    }
}
//运行结果:10

不同包子类

package package02;
/**
 * 不同包不同类 - 此时要导入被测类 import package01.Person;
 */
import package01.Person;
public class Woman extends Person {
    public static void main(String[] args){

        Person per =  new Person();
        System.out.print(per.age);
    }
}
//运行结果:10

protected

 同包同类

//运行结果:10

 同包不同类且无继承关系

//运行结果:10

 同包子类

//运行结果:10

 不同包不同类且无继承关系

//运行结果:报错,无法访问。
//注:但是可以通过public修饰的getAge()方法获得age。

 不同包子类

//运行结果:10

default

 同包同类

//运行结果:10

 同包不同类且无继承关系

//运行结果:10

 同包子类

//运行结果:10

 不同包不同类且无继承关系

//运行结果:报错,无法访问。

 不同包子类

//运行结果:报错,无法访问。

  注:不能写default,它也不是关键字,只是用default来标识不写访问修饰符的状态。
  

private

 同包同类

//运行结果:10

 同包不同类且无继承关系

//运行结果:报错,无法访问。

 同包子类

//运行结果:报错,无法访问。

 不同包不同类且无继承关系

//运行结果:报错,无法访问。

 不同包子类

//运行结果:报错,无法访问。

总结

public protected default private
类内
同包子类
同包不同类
不同包子类
不同包不同类
  • public没什么权限限制,跨包访问时记得导入即可。

  • protected 拥有同包或者继承关系即可访问。

  • default 在同一个包内即可访问,跨包即使有继承关系也没用。

  • private 只有在类内可以访问,同胞子类想访问也没辙。

阅读(2326) 评论(0)