java类的访问权限
来源:互联网 发布:淘宝卖家复制宝贝链接 编辑:程序博客网 时间:2024/05/22 11:47
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
package accesscontrol;public class AccessControlDemo { public static void main(String[] args) { // TODO Auto-generated method stub Base base=new Base("123-1",120.1); System.out.println(base.price); }}
accesscontrol.Base
package accesscontrol;public class Base { private String isbn; protected double price; //默认构造函数 public Base() { } //构造函数,如果只定义带参数的构造函数而不定义默认构造函数,那么Base的子类必须定义显式构造函数 //Implicit super constructor Base() is undefined for default constructor. Must define an explicit public Base(String isbn, double price) { this.isbn = isbn; this.price = price; } public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } }
但是假如我们将AccessControlDemo这个类移到test这个包中,我们会发现eclipse中提示错误,编译无法通过,因为在test包中对protected类型的成员变量不可见。
假如我们在test包中创建一个Base类的子类Bulk,也就是说Bulk是Base类不同包的子类。那么在Bulk类中能够直接访问protected double price;这个基层自Base类的成员变量,实例如下:
test.AccessControlDemo
package test;public class AccessControlDemo { public static void main(String[] args) { Bulk bulk=new Bulk("123-1",120.1); bulk.print(); }}
test.Bulk
package test;import accesscontrol.Base;public class Bulk extends Base { public Bulk() { super(); } public Bulk(String isbn, double price) { super(isbn, price); } public void print() { System.out.println(this.price); }}
0 0
- java类的访问权限
- java类的访问权限
- java类的访问权限
- java类的访问权限
- java类的访问权限
- java类的访问权限
- java类的访问权限
- Java类的访问权限
- java类的访问权限
- java类的访问权限
- java类的访问权限
- JAVA类的访问权限
- java类的访问权限
- java 类的访问权限
- java类的访问权限
- Java类的访问权限
- java类的访问权限
- java类的访问权限
- 【自制】javascript模拟数据库查询及格式化操作
- ZOJ 3713 In 7-bit
- 『大型网站技术架构』(一):架构演化、模式、要素
- 位运算符
- 期望 zoj3929 Deque and Balls
- java类的访问权限
- 康拓展开的应用
- usmart_dev.init(SystemCoreClock/1000000); stm32 战舰的usmart 程序
- 插入排序
- EL表达式取Map集合问题
- (9)Java设计模式 - 外观模式(Facade)
- 用按键精灵自动消除行号失败记
- 『大型网站技术架构』(二):高性能架构
- Ext.Ajax.request