java成员变量和方法的public等访问限定符的访问权限
2008-03-04 22:30
441 查看
导读:
在学习java的过程中,我写类经常会用到public,private 和protected 的,我的基本经验就是一般类的成员变量都是用private, 方法用public,类内部用的方法用protected,如果是存在子类的,那我就会把父类中的成员变量变为protected。(其余的看具体实际情况而定)
不过在一些公司的笔试题中,他们会要求你具体的写出像public这些访问限定符的作用域。其实,平常我都没去系统的考虑这些访问限定符的作用域,特别是包内包外的情况,OK,笔试不行了。
这是java基本的知识,也是公司看重的,那没办法啦,我的脑袋记不住东西,那我只能把这些东西写下来方便自己温故知新。
类的访问权限表
成员权限 本类 子类 包内 外部
public √ √ √ √
protected √ √ √ -
private √ - - -
默认(无) √ - √ -
貌似默认(无)是friendly
如果你看到这里还不是很了解上面的表,或者是很久就没看书了,忘记了上面的表的内容的意义,那下面的例子就是帮助你温故知新的好东东。
例如,有一个包demo中的类P,它有一个private 成员变量data, 一个public 默认构造方法, 一个public 访问方法getData(), 一个protected修改方法setData(),还有一个默认访问方式的辅助方法print()。
package demo;
public class P{
private int data;
public P(){
setData(0);
}
public int getData(){
return data;
}
protected void setData(int v){
data = v;
}
void print(){
System.out.println("used!")
}
}
本类的不用说了,在本类里面才不管什么访问限定符呢。
如有类Q,扩展了P,所以可以调用P的默认构造方法、访问方法getData()和修改方法setData()。但类Q不能直接访问P的成员变量data,辅助方法print()也不行(可以把默认,也就是没加任何访问限定符,理解为"包访问",在子类中不能直接访问,但在同包中的类却可以访问)。
import demo.P
public class Q extends P{
public Q(){
super(); <---------------------------Q可以访问父类的默认构造方法
}
public Q(int v){
setData(v); <------------------------Q可以访问父类的protected的方法
}
public String toString(){
int v = getData(); <--------------------Q可以访问父类的public的方法
return String.valueOf(v);
}
public void invalid1(){
data = 12;<---------------------------Q不能直接访问父类的private数据域
}
public void invalid2(){
print(); <-------------------------------Q不能直接访问父类默认权限的方法
}
}
对于默认访问,只有当2个类在同一个包中的时候,才可以互访对方的默认访问权限的成员。因此,由于类Q并不是包 demo 的一部分,它不可以访问P的辅助方法print()。
现在考虑包 demo 中的类R。R的方法可以调用P中 public 的默认构造方法和访问方法 getData(),protected 的修改方法 setData(),以及默认访问权限的辅助方法 print()。然而,类R不能直接访问P的 private 成员变量data。
package demo;
public class R{
private P p;
public R(){
p = new P(); <--------------------------R 可以访问P的默认构造方法
}
public void set(int v){
p.setData(v); <---------------------------R可以访问P的protected的方法
}
public int get(){
return p.getData(); <---------------------R可以访问P的public的方法
}
public void use(){
p.print(); <-------------------------------R可以访问P的默认权限的方法
}
public void invalid1(){
p.data = 12; <------------------------- R不能直接访问P的private的数据域
}
}
下面考虑类S,它既不是demo包的一部分,也没有直接或者间接地扩展自类P。所以,类S仅仅可以调用P中的 public 访问权限的默认构造方法和访问方法getData()。
import demo.P;
public class S{
private P p;
public S(){
p = new P(); <-------------------------------S可以访问P的public的默认构造方法
}
public int get(){
return p.getData(); <------------------------S可以访问P的public的方法
}
public void invalid1(int v){
p.setData(v);<------------------------------S不能访问P的protected的方法
}
public void invalid2(){
p.data = 12;<-------------------------------S不能直接访问P的private的数据域
}
public void invalid3(){
p.print() <------------------------------- S不能直接访问P的默认权限的方法
}
}
上面三个类是分别对应作用域子类、包内和外部三种情况的。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1835037
本文转自
http://blog.csdn.net/lin49940/archive/2007/10/21/1835037.aspx
在学习java的过程中,我写类经常会用到public,private 和protected 的,我的基本经验就是一般类的成员变量都是用private, 方法用public,类内部用的方法用protected,如果是存在子类的,那我就会把父类中的成员变量变为protected。(其余的看具体实际情况而定)
不过在一些公司的笔试题中,他们会要求你具体的写出像public这些访问限定符的作用域。其实,平常我都没去系统的考虑这些访问限定符的作用域,特别是包内包外的情况,OK,笔试不行了。
这是java基本的知识,也是公司看重的,那没办法啦,我的脑袋记不住东西,那我只能把这些东西写下来方便自己温故知新。
类的访问权限表
成员权限 本类 子类 包内 外部
public √ √ √ √
protected √ √ √ -
private √ - - -
默认(无) √ - √ -
貌似默认(无)是friendly
如果你看到这里还不是很了解上面的表,或者是很久就没看书了,忘记了上面的表的内容的意义,那下面的例子就是帮助你温故知新的好东东。
例如,有一个包demo中的类P,它有一个private 成员变量data, 一个public 默认构造方法, 一个public 访问方法getData(), 一个protected修改方法setData(),还有一个默认访问方式的辅助方法print()。
package demo;
public class P{
private int data;
public P(){
setData(0);
}
public int getData(){
return data;
}
protected void setData(int v){
data = v;
}
void print(){
System.out.println("used!")
}
}
本类的不用说了,在本类里面才不管什么访问限定符呢。
如有类Q,扩展了P,所以可以调用P的默认构造方法、访问方法getData()和修改方法setData()。但类Q不能直接访问P的成员变量data,辅助方法print()也不行(可以把默认,也就是没加任何访问限定符,理解为"包访问",在子类中不能直接访问,但在同包中的类却可以访问)。
import demo.P
public class Q extends P{
public Q(){
super(); <---------------------------Q可以访问父类的默认构造方法
}
public Q(int v){
setData(v); <------------------------Q可以访问父类的protected的方法
}
public String toString(){
int v = getData(); <--------------------Q可以访问父类的public的方法
return String.valueOf(v);
}
public void invalid1(){
data = 12;<---------------------------Q不能直接访问父类的private数据域
}
public void invalid2(){
print(); <-------------------------------Q不能直接访问父类默认权限的方法
}
}
对于默认访问,只有当2个类在同一个包中的时候,才可以互访对方的默认访问权限的成员。因此,由于类Q并不是包 demo 的一部分,它不可以访问P的辅助方法print()。
现在考虑包 demo 中的类R。R的方法可以调用P中 public 的默认构造方法和访问方法 getData(),protected 的修改方法 setData(),以及默认访问权限的辅助方法 print()。然而,类R不能直接访问P的 private 成员变量data。
package demo;
public class R{
private P p;
public R(){
p = new P(); <--------------------------R 可以访问P的默认构造方法
}
public void set(int v){
p.setData(v); <---------------------------R可以访问P的protected的方法
}
public int get(){
return p.getData(); <---------------------R可以访问P的public的方法
}
public void use(){
p.print(); <-------------------------------R可以访问P的默认权限的方法
}
public void invalid1(){
p.data = 12; <------------------------- R不能直接访问P的private的数据域
}
}
下面考虑类S,它既不是demo包的一部分,也没有直接或者间接地扩展自类P。所以,类S仅仅可以调用P中的 public 访问权限的默认构造方法和访问方法getData()。
import demo.P;
public class S{
private P p;
public S(){
p = new P(); <-------------------------------S可以访问P的public的默认构造方法
}
public int get(){
return p.getData(); <------------------------S可以访问P的public的方法
}
public void invalid1(int v){
p.setData(v);<------------------------------S不能访问P的protected的方法
}
public void invalid2(){
p.data = 12;<-------------------------------S不能直接访问P的private的数据域
}
public void invalid3(){
p.print() <------------------------------- S不能直接访问P的默认权限的方法
}
}
上面三个类是分别对应作用域子类、包内和外部三种情况的。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1835037
本文转自
http://blog.csdn.net/lin49940/archive/2007/10/21/1835037.aspx
相关文章推荐
- java成员变量和方法的public等访问限定符的访问权限
- java成员变量和方法的public等访问限定符的访问权限
- Java中成员方法与成员变量访问权限详解
- java中有成员访问权限private,public等原因
- Java通过反射访问私有成员变量和私有方法
- 创建一个Test类,包含有一个public权限的int型成员变量与一个char类型的成员变量,观察在main方法中的初始值
- 类中使用get和set方法来控制成员变量,而不将成员变量的权限设为public的原因?
- JAVA成员变量的访问权限
- public protected private 成员函数和成员变量在public protected private 继承后访问权限问题
- 默认的成员变量的访问权限[Java语言]
- Java成员变量的访问权限
- Adnroid ndk 中jni访问java方法、对象、成员变量
- java的反射可以绕过访问权限,访问到类的私有方法和成员
- 面试题:说说Java中接口、类、成员变量、成员方法、构造方法有哪些访问修饰符和他们的作用范围
- Java类修饰符和成员变量、函数修饰符与访问权限
- java(有关类成员变量的访问权限)
- JAVA中包和方法变量访问权限
- JavaWeb那些事儿(二)--java中类、成员和方法的访问权限
- 默认的成员变量的访问权限[Java语言]
- java(有关类成员变量的访问权限)