java基础--访问修饰符之我见

1.java修饰符访问权限--public,protected,private,default(package,friendly)

被public修饰的类、类属变量及方法,可以被包内及包外的任何类访问;
被protected修饰的类、类属变量及方法,包内的任何类,及包外的那些继承了此类的子类才能访问;
被private的修饰的类、类属变量及方法,包内包外的任何类均不能访问;
如果一个类、类属变量及方法不以这三种修饰符来修饰,它就是default,也可以称之为是friendly类型的或者package类型,
那么包内的任何类都可以访问它,而包外的任何类都不能访问它,这也包括包外继承了此类的子类,因此,这种类、类属变量及方法对包内的其他类是友好的,开放的,而对包外的其他类是关闭的。

2.private和protected不能修饰类和接口的原因之我见

在使用eclipse作为IDE,在创建类或者接口时,或看到这样的情况:

也就是说private和protected修饰符不能修饰类和接口。这是为什么呢?笔者对此做了分析如下

(1)根据private的访问权限限制:private修饰的类和接口不能被其他任何类和接口访问。那么我们定义这样的一个类或者接口有何意义呢?因此不要也罢。

(2)根据protected的访问权限限制:protected修饰的类只能被同一个包中的类或者其子类来访问。那么我们举个例子:假设类B和A不在同一个包,A又是protected类, 如果B想访问A的则B只能是A的子类,而B如果要成为A的子类(或者说B能继承A)的前提又是B能访问A。这两个条件互为前提,无法实现。

3.接口的方法不能使用private,protected,default(friendly)修饰符修饰

接口的方法一定是要被其他类来实现的,否则就失去了接口存在的意义。既然需要被其他类来实现,所以接口不能被private,protected修饰,原因如下:

1)假设public接口I有一个protected方法M,那么位于其他包的public类C就可以实现这个接口(方法M依然是protected)。那么C的同包类D调用方法M只能这样访问:

C c = new C();
c.M();
无法这样访问:

I c = new C();
c.M();

如果接口I被多个类C1,C2...实现,其他类再根据不同情况来选择调用C1,C2,...的方法M时,就无法提供统一的接口了。本来这一用一个接口访问M方法,callM(I c),现在要根据不同的实现类C1,C2,...来提供多个接口。这样就失去了使用接口的重要意义:提供统一的接口,面向接口编程思想也无法体现。

(2)假设接口I是default的, 那么方法M是protected理论上是没有问题的,而且M也可以是default、public。至于为什么不让用protected:既然只能被本包中的类实现,其他包不能实现,这就失去了使用接口的重要意义:提供统一的接口。既然public既能被本包类访问,也能被其他包中的类访问,何乐不为呢。呵呵

(3)假设public接口I有一个default方法M, 那么位于其他包的无法正常实现接口I,因为方法M对其不可见。

(4)假设default接口I有一个default方法M,那么方法M是default理论上是没有问题的,而且M也可以是proteced、public。可能出于和(2)所说不能用protected的相同原因,不能使用default。

时间: 2024-08-11 03:27:27

java基础--访问修饰符之我见的相关文章

Java中访问修饰符public、private、protecte、default

Java中访问修饰符public.private.protecte.default的意义讲解:public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”.被其修饰的类.属性以及方法不 仅可以跨类访问,而且允许跨包(package)访问.private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”.被其修饰的类.属性以 及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问.protect: 介于public 和 private 之间的一种访问修饰符,一

Java的访问修饰符的作用范围

访问修饰符: private default protected public 作用范围: 访问修饰符\作用范围 所在类 同一包内其他类 其他包内子类 其他包内非子类 private 可以访问 不可以 不可以 不可以 default 可以 可以 不可以 不可以 protected 可以 可以 可以 不可以 public 可以 可以 可以 可以 private 被private修饰的属性和方法,不能被其他类访问,子类不能继承也不能访问.只能在所在类内部访问. default变量或者方法前没有访问修

Java基础——常用修饰符分析

在学习Java基础时会时不时用到一些修饰符,这些修饰符修饰的内容不一样,作用域也不一样,只有梳理清楚才能正确的使用它们. 不同修饰符修饰内容的作用域 public public公共的,表示该属性(或方法)公开,所有用户都可以直接进行调用. default缺省 default表示默认,不仅本类访问,而且是同包可见. private private私有的,表示该属性(方法)为只有本类内部可以访问(类内部可见).(想用private还要用set和get方法供其他方法调用,这样可以保证对属性的访问方式统

JAVA基础学习-修饰符的使用

作用范围 那么什么情况该用什么修饰符呢?从作用域来看,public能够使用所有的情况. 但是大家在工作的时候,又不会真正全部都使用public,那么到底什么情况该用什么修饰符呢? 1. 属性通常使用private封装起来2. 方法一般使用public用于被调用3. 会被子类继承的方法,通常使用protected4. package用的不多,一般新手会用package,因为还不知道有修饰符这个东西 再就是作用范围最小原则简单说,能用private就用private,不行就放大一级,用package

java中访问修饰符

较之c++ 中 public,proctected, private 三种访问控制, java多了默认访问控制. java中四种访问控制权限 简单描述为一下四句: 1)private 仅本类可见 (同c++) 2)默认 对本包可见/包内访问 (c++没有) 3)protected 对本包和所有子类可见 (c++中没有本包概念,较 默认访问 可以被在其他包下的子类访问) 4)public 对所有类可见 (同c++) 其中1)4)与c++相同,对2)3)做简单测试 3)protected 对本包可见

java的访问修饰符

public:外部可以访问 private:外部不可以访问,内部可以访问 什么时候设置成public或者private:技巧默认全部设置为private,外部需要时就设置成public 一般情况下java的类的属性为private,外部如果想访问类的属性怎么办? getter和setter方法:设置值时用setter,取值用getter方法 package cuteSnow; public class SetGet { private int num; public int getnum() {

java 成员访问修饰符

作用域 当前类 当前包(package) 子类 其他包(package) public ok ok ok ok protected ok ok ok no default ok ok no no private ok no no no

java基础之访问修饰符protected

java的访问修饰符protected关键字让我很迷惑,网上的很多人业内人士的自我注解也依然没有消除我对这个关键字的认识. 我的疑惑有以下几点: 1:增设protected关键字的初衷,也就是说:这个的"受保护"的原理是什么?? 2:在Think in Java中,对protected定义是有误的. 3:protected的作用到底是什么呢? 4:涉及到继承. 在java编程思想中:通过阅读,我的理解是: 关于对有protected访问修饰符的类的继承,可以分为两种情况: (1)不同包

java的访问控制(包、访问修饰符、修饰符)

一.     java的类包 编写好一个源程序后,首先要执行javac命令进行编译源文件,并生成与源文件同名后缀为“.class”的字节码文件(类文件),该类文件与源文件默认在同一个目录中.该类文件是由用户创建的,而在java编程环境中,java本身提供了大量的类文件,在编程时可以直接引入使用,极大方便了程序的编写. 包的定义:是Java编程的基础,包蕴涵于标准类的体系结构和用户自己的程序中,包是有唯一命名的类的集合.在java中,包分为用户包和系统包. 一)用户包:即由用户在项目中创建的包.