Java访问权限修饰词详解

java访问权限的作用:便于类库的开发者对类进行修改和改进,并确保不会对类的消费者造成影响。例如将一些方法的属性设置为private的,当类库开发者更改该方法的实现方式时,对类的消费者来说是没有影响的,因为没有消费者能调用那个方法。

包的概念:java引入包机制是为了构建一个内聚的类库单元,便于类的管理以及防止和其它同名类的冲突。
1.package关键字:将类置于指定的包内,该句必须是文件中非注释以外的第一句程序代码。

package com.uestc.www;//将类置于com.uestc.www包内

注:当使用命令模式编译和运行java程序时,打包须知:

package com.uestc.www;
public class Abc {

}//该源程序位于F:\java_practice\csdn

这里写图片描述
第一句会在当前路径下生成class文件,而第二句会以当前路径为根路径生成com\uestc\www形式的包,并将编译得到的class文件置于其中。

2.import关键字:导入某个包中的类。

import com.uestc.www.Abc;//导入com.uestc.www包内的Abc类
import com.uestc.www.*;//导入com.uestc.www包内的所有类

四种访问权限:
1.public:只能修饰类、方法(含构造方法)、成员变量。其修饰的部分所有人都能访问;

2.默认修饰符(friendly):只能修饰类、方法(含构造方法)、成员变量。其修饰的部分只有同一包内的类能访问,对于这个包之外的所有类,这个成员是private的;

3.private:只能修饰方法(含构造方法)、成员变量。其修饰的部分只能在自身类中访问。例如将某类的构造方法设置为private,那么在其它类中就不能调用“new”来创建该类的实例,通常在该类中会对外提供一种方法,该方法能返回该类的实例;再例如我们经常将成员变量设置为private的,对外提供set/get方法对其进行访问,在set/get方法中可做一些比如权限检测等操作,而不是将域直接暴露给所有用户;

4.protected:只能修饰方法(含构造方法)、成员变量。

  • 在同一包中具有包访问权限,相当于默认访问权限;
  • 在不同包内:访问权限赋予派生类(继承树的第一个子类—–导出类)
    1.在子类中,可继承不同包内父类的protected方法和属性,也只能在该子类中访问(除非重写方法或属性)
package com.scu.www;

public class Son {
    protected static int age = 20;
    protected void say() {
        System.out.println("I am a son");
    }
}
package com.uestc.www;
import com.scu.www.*;

public class ProtectedTest extends Son{
    public static void main(String[] args) {
        Son s = new Son(); 
        s.say();//(错)不能在不同包内用父类对象引用调用其protected方法和属性;
        System.out.println(s.age);//(对)成员变量age是static的,子类和父类拥有的是同一份存储空间,因此可以访问;
        ProtectedTest pt = new ProtectedTest();
        pt.say();//(对)子类可以继承并访问不同包内父类的protected方法和属性;
    }
    public void tell() {
        super.say();//(对)在包外子类中可以用super访问父类的protected方法和属性;
    }
}

2.若将子类构造器用protected修饰,则在不同包内是不允许用“new”来创造对象实例的,因为其构造方法是protected的,只允许创造其子类的实例;(类的构造器不能通过继承而得到,没指明的话就是默认构造器,在创造实例时会隐式调用“super.构造方法”)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值