private、default、protected和public的作用域

我们经常用四种修饰符去修饰变量、方法和类,今天我们来测试他们修饰方法时候的作用域。

Person类

package Scope1;
/**
 * 测试类
 */
public class Person {
    public void publicMed(){}
    protected  void protectedMed(){}
    void defaultMed(){}
    private void privateMed(){}
    // 都可以访问
    public void test(){
        Person person = new Person();
        person.protectedMed();
        person.defaultMed();
        person.privateMed();
        person.publicMed();
    }
}

测试一

package Scope1;
/**
 * 同包,非子类
 */
public class Test01 {
    public void test01(){
        Person person = new Person();
        person.publicMed();
        person.protectedMed();
        person.defaultMed();
        // private方法不可见
    }
}

测试二

package Scope1;
/**
 * 同包,子类
 */
public class Test02 extends Person{
    public void test02(){
        super.publicMed();
        super.protectedMed();
        super.defaultMed();
        // private方法不可见
    }
}

测试三

package Scope2;
import Scope1.Person;
/**
 * 非同包,非子类
 */
public class Test03 {
    public void test02(){
        Person person = new Person();
        person.publicMed();
        // protected方法不可见
        // default方法不可见
        // private方法不可见
    }
}

测试4

package Scope2;
import Scope1.Person;
/**
 * 非同包,子类
 */
public class Test04 extends Person{
    public void test04(){
        super.publicMed();
        super.protectedMed();
        // default方法不可见
        // private方法不可见
    }
}

总结

1、private关键子,只能在本类中才可以访问。
2、default关键字,同包下才可以访问。
3、protected关键字,同包下和不同包下的子类才可以访问。
4、public关键字,任何地方都可以访问。

猜你喜欢

转载自www.cnblogs.com/feiqiangsheng/p/12233495.html