java基础学习(五)访问权限控制

java提供的访问权限控制的等级,从最大权限到最小权限依次为:public、protected、包访问权限(没有关键字)、private。

这几个访问权限修饰词在使用时,是置于类中每个成员的定义之前的。无论它是一个方法还是一个域。每个访问权限修饰词仅控制它所修饰的特定定义的访问权。

1、包访问权限(没有关键字)
如果不提供任何访问修饰词,意味着它是“包访问权限”。当前的包中的所有其他类对那个成员都有访问权限,但对于这个包之外的所有类,这个成员却是private。

2、接口访问权限(public)
使用关键字public,意味着public之后紧跟着的成员声明自己对每个人都是可用的。

3、私有访问权限(private)
意味着除了包含该成员的类之外,其他任何类都无法访问这个成员。
任何可以肯定只是该类的一个“助手”方法的方法,都可以把它指定为private,以确保不会在包内的其他地方误用到它。

4、继承访问权限(protected)
将基类的某个特定成员的访问权限赋予派生类而不是所有类,可以使用protected。它也提供包访问权限,相同包内的其他类也可以访问protected元素。

//包路径 
package com.thinkinjava.chapter06.dessert;

public class Cookie {
    public Cookie(){
        System.out.println("Cookie Constructor");
    }
    //包访问权限
    void bite(){
        System.out.println("bite");
    }
}

这里写图片描述
上面的两个类在不同的包中,Cookie类有一个包访问权限方法bite()。Chocolate类继承Cookie类。同时继承了Cookie类中的public成员和包访问权限成员方法bite()。但是不能在Chocolate类中使用该方法bite()。它位于不同的包中,所以无法使用它,即使在继承的子类中存在该方法。但是将它改为protected访问权限就可以使用了。

访问权限总结:
这里写图片描述

类访问权限
类的访问权限的修饰词必须出现在关键字class之前。
每一个编译单元(文件)都只能有一个public类。而且public类的名称必须与该编译单元的文件名相匹配,包括大小写。但是在该编译单元中,也可以包括多个不带public的类,具有包访问权限:
这里写图片描述
图片中的Acctest类的成员的访问权限也都是适用的,在同包中其他类中创建该类的对象,并调用方法:
这里写图片描述

类既不可以是private的,也不可以是protected的。不可以被其他类创建。
这里写图片描述
但是在内部类中,可以使用private 和protected访问权限:
这里写图片描述

对于类的访问权限,只能是public或包访问权限。可以把构造器指定为private,从而阻止任何人创建该类的对象。但是你可以在本类的static方法中创建对象,因为与初始化的顺序有关:

//两种方式创建私有构造器的类的对象
public class ClassAccess {
    //构造器设置为private,
    private ClassAccess(){
    }
    //可以通过static方法创建对象,且有且只有一个
    public static ClassAccess makeObject(){
        return new ClassAccess();
    }
    //也可以是static域,且有且只有一个
    private static ClassAccess ca=new ClassAccess();
    public static ClassAccess access(){
        return ca;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值