Java 访问权限控制

## 简介
java中4种访问权限修饰符分别为public、protect、default、private,他们这就说明了面向对象的封装性,所以我们要适用他们尽可能的让权限降到最低,从而安全性提高。

概况

首先在这里把它们的访问权限表示出来:

访问权限    类  包  子类  其他包

public     ∨   ∨   ∨     ∨

protect    ∨   ∨   ∨     ×

default    ∨   ∨   ×     ×

private    ∨   ×   ×     ×

详解

  • a、私有权限(private)

    private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用。

  • b、默认权限(default)

    类,数据成员,构造方法,方法成员,都能够使用默认权限,即不写任何关键字。默认权限即同包权限,同包权限的元素只能在定义它们的类中,以及同包的类中被调用。
      

    1. 仅限同包类(无论是否是子类)访问;
    2. 若子类同包,则可访问;
    3. 子类(其他包)不能访问;
    4. 当前包下的子包中的类,也不可访问;
  • c、受保护权限(protected)

    protected可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被protected修饰的成员,能在定义它们的类中,同包的类中被调用。
    如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类。
      

    1. 同包类(无论是否是子类)可访问
    2. 子类(不论是否同包)可访问
    3. 其他包的类(非子类)不能访问
  • d、公共权限(public)

    public可以修饰类,数据成员,构造方法,方法成员。被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包,是权限最大的一个修饰符。

TIPS:

1、并不是每个修饰符都可以修饰类(指外部类),只有public和default可以。

2、所有修饰符都可以修饰数据成员,方法成员,构造方法。

3、为了代码安全起见,修饰符不要尽量使用权限大的,而是适用即可。比如,数据成员,如果没有特殊需要,尽可能用private.

4、修饰符修饰的是“被访问”的权限

Example

注释行均无权访问

com.bean.test包

package com.bean.test;

/**
 * 水果类
 */
public class Fruit {
    private String priColor;
    protected String protectedColor;
    String defaultColor;
    public String publicColor;

    private void mo(){
        this.priColor = "privateColor";
        this.defaultColor="defaultOrange";
        this.protectedColor = "proStr";
        this.protectedColor = "proStr";
        this.publicColor = "pubStr";
    }

    public Fruit() {
    }

    // getter setter 
}
package com.bean.test;

/**
 * 橘子类 水果子类
 */
public class Orange extends Fruit {
    private void mo(){
        Fruit fruit = new Fruit();
//        fruit.priColor = "privateColor";
        fruit.defaultColor="defaultOrange";
        fruit.protectedColor = "proStr";
        fruit.publicColor = "pubStr";

//        this.priColor="priColor";
        this.defaultColor="defaultOrange";
        this.protectedColor = "proStr";
        this.publicColor = "publicColor";
    }
}
package com.bean.test;

/**
 * 桌子类
 */
public class Desk {

    private void mo(){
        Fruit fruit = new Fruit();
//        fruit.priColor = "privateColor";
        fruit.defaultColor="defaultOrange";
        fruit.protectedColor = "proStr";
        fruit.publicColor = "pubStr";
    }
}

com.bean.test.child1包

package com.bean.test.child1;

import com.bean.test.Fruit;

/**
 * 苹果类 水果子类
 */
public class Apple extends Fruit  {

    private void mo(){
        Fruit fruit = new Fruit();
//        fruit.priColor = "privateColor";
//        fruit.defaultColor="defaultOrange";
//        fruit.protectedColor = "proStr";
        fruit.publicColor = "pubStr";

//        this.priColor="priColor";
//        this.defaultColor="defaultOrange";
        this.protectedColor = "proStr";
        this.publicColor = "publicColor";
    }
}


package com.bean.test.child1;
import com.bean.test.Fruit;

/**
 * 椅子类
 */
public class Chair {

    private void mo(){
        Fruit fruit = new Fruit();
//        fruit.priColor = "privateColor";
//        fruit.defaultColor="defaultOrange";
//        fruit.protectedColor = "proStr";
        fruit.publicColor = "pubStr";
    }

}

com.bean包

package com.bean;

import com.bean.test.Fruit;

/**
 * 香蕉类 水果子类
 */
public class Banana extends Fruit {

    private void mo(){
        Fruit fruit = new Fruit();
//        fruit.priColor = "privateColor";
//        fruit.defaultColor="defaultOrange";
//        fruit.protectedColor = "proStr";
        fruit.publicColor = "pubStr";

//        this.priColor="priColor";
//        this.defaultColor="defaultOrange";

        this.protectedColor = "proStr";
        this.publicColor = "publicColor";
    }
}

package com.bean;

import com.bean.test.Fruit;

/**
 * 房子类
 */
public class House {

    private void mo(){
        Fruit fruit = new Fruit();
//        fruit.priColor = "privateColor";
//        fruit.defaultColor="defaultOrange";
//        fruit.protectedColor = "proStr";
        fruit.publicColor = "pubStr";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值