java - 访问修饰符

访问修饰符是指能够控制类、成员变量、方法的使用权限的关键字

修饰符说明
public共有的,对所有类可见
protected受保护的,对同一包内的类和所有子类可见
private私有的,在同一类内可见
默认的在同一包内可见,默认不使用任何修饰符

public:公有的

被声明为public的类、方法、构造方法、接口能被其他任何类访问。
如果几个相互访问的public类分布在不同的包中,则需要导入相应public类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承
java程序的main()方法必须设置成公有的,否则,java解释器将不能运行该类。

protected:受保护的

被声明为protected的变量、方法和构造方法能被同一个包中的任何其他类访问,也能够被不用包中的子类访问。

protected访问修饰符不能修饰类和接口,方法和成员变量能够声明为protected,但是接口的成员变量和成员方法不能声明为protected。

子类能访问protected修饰符声明的方法和变量,保护不相关的类使用这些方法和变量

public class Work {
    String name;
    protected void say(){
        System.out.println(this.name + ":能用javaScript改写的终将用javaScript改写");
    }
    void sun(String name){
        this.name = name;
    }

    public static void main(String[] args) {
        Work work = new Work();
        work.sun("sun");
        work.name = "山鸡";
        work.say();// 运行输出  山鸡:能用javaScript改写的终将用javaScript改写
    }
}
class Sonwork extends Work{
    public static void main(String[] args) {
        Sonwork sonwork = new Sonwork();
        sonwork.name = "浩南";
        sonwork.say(); // 运行输出  浩南:能用javaScript改写的终将用javaScript改写
    }
}

如果把say()方法声明为 private,那么除了Work之外的类都不能访问say方法,声明为public,那么所有的类都能访问该方法,如果只想让该方法对其所在类的子类可见,则将该方法声明为protected。

private:私有的

私有访问修饰符是最严格的访问级别,所有被声明为private的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为private。

声明为私有访问类的变量只能通过类中公共的Getter/Setter方法被外部类访问。

private访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。

public class Work {

    private String matter = "好难";
    private int num;
    public String getMatter() {
        return matter;
    }
    public void setNum(int num) {
        this.num = num;
    }

    public static void main(String[] args) {
        System.out.println(work.getMatter());// 好难
        work.setNum(3);
        System.out.println(work.num);// 3
    }
}
class Sonwork extends Work{
    public static void main(String[] args) {
        Sonwork sonwork = new Sonwork();
        sonwork.setNum(6);
        System.out.println(sonwork.matter); //报错
        System.out.println(sonwork.getMatter());// 好难
        System.out.println(sonwork.num);// 6
    }
}

类中的matter、num变量为私有变量,所以其他类不能直接得到和设置该变量的值。为了使其他类能够操作该变量,定义了两对public方法,getMatter()/setNum() ,它们用来获取和设置私有变量的值。

在类中定义访问私有变量的方法,习惯上是这样命名的:在变量名称前面加“get”或“set”,并将变量的首字母大写。例如,获取私有变量 name 的方法为 getName(),设置 name 的方法为 setName()。这些方法经常使用,也有了特定的称呼,称为 Getter 和 Setter 方法。

默认的:不使用任何关键字

不使用任何修饰符声明的属性和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为public static final,而接口里的方法默认情况下访问权限为public。

父类中声明为public的方法在子类中也必须为public。

父类中声明为protected的方法在子类中要么声明为protected,要么声明为public。不能声明为private。

父类中默认修饰符声明的方法,能够在子类中声明为private。

父类中声明为private的方法,不能够被继承。

当需要让自己编写的类被所有的其他类访问时,就可以将类的访问控制符声明为 public。

当需要让自己的类只能被自己的包中的类访问时,就可以省略访问控制符。

当需要控制一个类中的成员数据时,可以将这个类中的成员数据访问控制符设置为 public、protected,或者省略。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值