java类本身访问权限_java类的访问权限

转载:http://www.cnblogs.com/xwdreamer/archive/2012/04/06/2434483.html

1.解析

Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符。

private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。

default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。

protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。

public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。

下面用表格的形式来展示四种访问权限之间的异同点,这样会更加形象。表格如下所示:

同一个类

同一个包

不同包的子类

不同包的非子类

Private

Default

Protected

Public

2.Protected

假设在包accesscontrol下面有AccessControlDemo和 Base 两个类,其中protected double price;是Base类的成员变量,因为两个类在同一个包中,所以在AccessControlDemo类中可以直接访问 System.out.println(base.price);具体实例如下:

accesscontrol.AccessControlDemo

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

packageaccesscontrol;

public classAccessControlDemo {

public static voidmain(String[] args) {

//TODO Auto-generated method stub

Base base=new Base("123-1",120.1);

System.out.println(base.price);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

accesscontrol.Base

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

packageaccesscontrol;

public classBase {

privateString isbn;

protected doubleprice;

//默认构造函数

publicBase() {

}

//构造函数,如果只定义带参数的构造函数而不定义默认构造函数,那么Base的子类必须定义显式构造函数

//Implicit super constructor Base() is undefined for default constructor. Must define an explicit

public Base(String isbn, doubleprice) {

this.isbn =isbn;

this.price =price;

}

publicString getIsbn() {

returnisbn;

}

public voidsetIsbn(String isbn) {

this.isbn =isbn;

}

public doublegetPrice() {

returnprice;

}

public void setPrice(doubleprice) {

this.price =price;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

但是假如我们将AccessControlDemo这个类移到test这个包中,我们会发现eclipse中提示错误,编译无法通过,因为在test包中对protected类型的成员变量不可见。

假如我们在test包中创建一个Base类的子类Bulk,也就是说Bulk是Base类不同包的子类。那么在Bulk类中能够直接访问protected double price;这个基层自Base类的成员变量,实例如下:

test.AccessControlDemo

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagetest;

public classAccessControlDemo {

public static voidmain(String[] args) {

Bulk bulk=new Bulk("123-1",120.1);

bulk.print();

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

test.Bulk

961ddebeb323a10fe0623af514929fc1.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值