java变量访问权限
❶ java的访问权限中,共有变量共有方法、友好变量友好方法以及受保护的成员变量和方法,他们都是在A类
在你指定的情况下,三种类型差异不大,都可以被引用。
访问权限的级别排列,从高到低是pubic、protected、友好的、private。
这个权限级别涉及很多情况,在不同情况下差异很大:
public修饰的变量和方法可以被任何类继承或使用
protected修饰的变量或方法:继承-当前类,同包类,不同包类。使用-当前类,同包类。
友好修饰的变量和方法只能被当前类,同包类继承或使用。
private修饰的变量和方法只能被当前类使用。不存在继承。
❷ java 的class 为什么不可以是protected访问权限
1. protected 访问控制符能被用于方法和成员变量。
2. 声明为protected的方法和成员变量能被同一个包里的所有类所访问,就像默认修饰符package一样。
3. 能被该类的子类所访问,子类可以和父类不在一个包中。
这样,当你想让一个类中的某个方法或成员变量在包中都可见,而且其子类也能访问(子类有可能和父类不在同一个包中)但又不想让所有类都可以访问该类时,就可以用protected修饰符。
可访问性: public > protected > package >private
注意:
4. But a subclass in another package can access the protected members in the super-class via only the references of subclass or its subclasses. A subclass in the same package doesn’t have this restriction. This ensures that classes from other packages are accessing only the members that are part of their inheritance hierarchy.
但是位于与父类不同包中的一个子类,能够使用其父类中protected成员的途径只能是,使用子类(或者是子类的子类)的引用。子类和父类在同一个包中则没有这个限制。这样就保证了其他包中的类只能访问它们所继承的部分成员。
下面的例子可以说明上述几点:(特别注意第4点)
1 创建一个父类Bird.java,放在birdpack包中,父类中有一个protected int的成员变量nFeathers:
package birdpack; public class Bird { protected int nFeathers; }
2 创建Bird的一个子类Duck1.java,放在ckpack包中,这个程序说明在子类中直接使用父类的protected变量是可以的,父类的protected权限的成员变量可以被子类继承:
package ckpack; import birdpack.Bird; public class Duck1 extends Bird { public void setn(int ck1n) { nFeathers = ck1n; } }
3 创建Bird的一个子类Duck2.java,放在ckpack包中,这个程序说明在子类中通过子类的对象访问父类的protected成员是可以的:
package ckpack; import birdpack.Bird; public class Duck2 extends Bird { public void constructor(int newDuck2) { Duck2 d2 = new Duck2(); //在子类中通过子类的对象访问父类中的protected变量 d2.nFeathers = newDuck2; } }
4 创建Bird的一个子类Duck3.java,放在ckpack包中,这个程序说明在子类中使用父类的对象访问父类的protected成员反而是不行的:
package ckpack; import birdpack.Bird; public class Duck3 extends Bird { public void constructor(int newDuck3) { Bird b = new Bird(); //子类中用父类对象反而不能访问父类中的protected变量 //b.nFeathers = newDuck3; } }
5 创建Bird的一个子类Swan.java,放在ckpack包中,这个程序说明在子类中使用其他子类的对象访问父类的protected成员也是不行的:
package ckpack; import birdpack.Bird; public class Swan extends Bird { public void constructor(int swan) { Duck1 d1 = new Duck1(); //子类中用另外一个子类的对象也不能访问父类中的protected变量 //d1.nFeathers = swan; } }
-------------------------------------------------------------------------------------------------------------------------------
转载这篇文章,主要是为了说明,虽然在java中,父类中protected权限的成员变量可以被子类访问,但是还是有条件的,具体如下:
1.在子类中直接使用父类的protected变量是可以的,父类的protected权限的成员变量可以被子类继承
2.在子类中通过子类的对象访问父类的protected成员是可以的
3.在子类中使用父类的对象访问父类的protected成员反而是不行的
4.在子类中使用其他子类的对象访问父类的protected成员也是不行的
❸ JAVa类中默认的成员变量的访问权问题
java作用域public ,private ,protected 及不写时的区别
在说明这四个关键字之前,我想就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes,认为都是自己的朋友。
1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。
3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。
4、default 则在包内包外的子类都可见。
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
❹ java访问权限控制问题
默认访问权限(包访问权限):如果一个类的方法或变量被包访问权限修饰,也就意味着只能在同一个包中的其他类中显示地调用该类的方法或者变量,在不同包中的类中不能显示地调用该类的方法或变量。
private:如果一个类的方法或者变量被private修饰,那么这个类的方法或者变量只能在该类本身中被访问,在类外以及其他类中都不能显示地进行访问。
protected:如果一个类的方法或者变量被protected修饰,对于同一个包的类,这个类的方法或变量是可以被访问的。对于不同包的类,只有继承于该类的类才可以访问到该类的方法或者变量。
public:被public修饰的方法或者变量,在任何地方都是可见的。
❺ java方法中变量的定义为什么不能用访问权限修饰词
你要弄清楚变量和属性的区别。
变量是方法体中定义的。
属性是类体中定义的。
而权限标示符只用于修饰属性和方法。不修饰变量,因为变量属于方法体私有。
举个栗子:
你有一辆轿车,你可以给你的轿车加以权限,只能你自己用,还是可以给你老婆用,或者给所有人用——你本人就是一个类,这个车就是你的一个属性,表面你是个有车的人。
既然你有了车了,那么,你肯定也有一个方法叫开车,你可以为自己开,也可能为别人开,这就看你给自己的这个方法怎么加权限了。
如果是Static,那就是出租车,任何人都能叫你开车
如果是Public,你人比较好,可以为朋友开车
如果是Protect,那纯粹私家车,给自己或家人开
如果是Private,就只给自己开了
但是至于你开车方法里面会用到什么,比如说:导航,乘客不知道,朋友不知道,家人不知道,他们只关心你能把他们送到目的地,不需要知道你怎么开的,等到开车结束,导航也随即结束,失效。
❻ java中A类的成员变量x是默认的访问权限,在A类的子类中可以访问该成员变量吗
可以,A类的子类叫内部类,可以访问A类的所有数据成员以及成员方法,包括私有成员;在类的继承中,默认访问性的成员方法可以被包中任何类和其它包中的子类所访问,但私有成员除外……
❼ java类中变量如果定义时没给访问权限默认是什么啊
如果没有写就是默认访问权限。
java的类有2种访问权限,public、默认
而方法和变量有4种:public、默认、protected、private
其中默认访问权限和protected很相似,有着细微的差别。
public意味着任何地方的其他类都能访问
默认则是同一个包的类可以访问。
protected表示同一个包的类可以访问,其他的包的该类的子类也可以访问。
private表示只有自己类能访问
❽ 为什么说java成员变量设置的一个原则,就是尽可能设置成最小的访问权限。
访问权限有四种:public(公有) protected(保护) private(私有) friendly(默认),尽可能的设置成最小访问权限就是把数据设置成private的,如:
private int age;
void setAge(int age){this.age = age;}
int getAge(){return age;}
这样设置的话,这有自己类的方法能够调用age的值,别的类不能直接去调用或修改age的值了,只能通过set get方法来实现,有利于数据的保护和隐藏,这就是JAVA的一个重要的特点——封装!但是并不是说所有的数据都要设置成private,那样会很麻烦,根据需要吧!
❾ 关于java访问权限的问题:如果一个类被申明为public类,那么这个类中的方法和变量都
不是的,
里面的变量也可以是private.
访问权限这个问题很好理解.
如果变量是public的,那么其他的类就可以直接调用.
如果是private的,那么要通过set和get方法来获得变量.
一般都推荐把变量设置为private,然后通过set和get获取
方法就要根据具体情况而言了.
❿ 在Java中类的成员变量的访问权限有哪几种
public 可以被所有其他类访问
protect 自身,子类及同一个包中类可以访问
private 只能被自身访问和修改
package 同一个包中的类可以访问
建议变量使用private,这样可以防止干扰.
可以把方法声明成public.