重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
(1)public : 公共权限
创新互联专业IDC数据服务器托管提供商,专业提供成都服务器托管,服务器租用,达州电信机房,达州电信机房,成都多线服务器托管等服务器托管服务。
修饰对象: 修饰类、方法、属性
继承: 被public所修饰的成员能被该类的所有子类继承下来。
作用域: 可以被任意类访问
public能用来修饰类,在一个java源文件中只能有一个类被声明为public,而且一旦有一个类为public,那这个java源文件的文件名就必须要和这个被public所修饰的类的类名相同,否则编译不能通过。说到这里,穿插多一点知识。一个类作为外部类的时候只能被public或者默认访问修饰符所修饰,但是一个类如果作为内部类的时候,则可以被四种访问修饰符所修饰,因为一个类作为内部类的时候,就作为外部类的一个成员属性了,因此可以有四种访问修饰符修饰,这是内部类和外部类的一个区别。
public用来修饰类中成员(变量和方法),被public所修饰的成员可以在任何类中都能被访问到。通过操作该类的对象能随意访问public成员。
public在类的继承上的体现,被public所修饰的成员能被所有的子类继承下来。
(2)protected:受保护的权限
修饰对象:修饰内部类,接口,属性,方法
继承: 被protected所修饰的成员能被该类的所有子类继承下来。
作用域: 可以被同包类访问,如果不是同包,必须是该类的子类才能访问
(3)default : 同包权限(默认,缺省的)
修饰对象:修饰类,属性,方法。
继承:被default所修饰的成员只能被该类所在同一个package中的子类所继承下来。(也就是说只有在同一个package中的子类才能访问到父类中default修饰的成员)
作用域: 只能被同包的类访问
(4) private : 私有权限
修饰对象 : 内部类,属性,方法
作用域: 只能在本类中使用
注意:
(1)protected不能修饰类。
(2)priavte可以修饰类,但是该类必须是一个内部类。
在定义类时,推荐访问控制级别从严处理:
(1) 如果不允许外部直接通过 new 创建对象,构造方法必须是 private。
(2)工具类不允许有 public 或 default 构造方法。
(3)类非 static 成员变量并且与子类共享,必须是 protected。
(4)类非static成员变量并且仅在本类使用,必须是private。
(5)类 static 成员变量如果仅在本类使用,必须是 private。
(6)若是 static 成员变量,必须考虑是否为 final。
(7)类成员方法只供类内部调用,必须是 private。
(8)类成员方法只对继承类公开,那么限制为 protected。
默认访问权限(包访问权限):如果一个类的方法或变量被包访问权限修饰,也就意味着只能在同一个包中的其他类中显示地调用该类的方法或者变量,在不同包中的类中不能显示地调用该类的方法或变量。
private:如果一个类的方法或者变量被private修饰,那么这个类的方法或者变量只能在该类本身中被访问,在类外以及其他类中都不能显示地进行访问。
protected:如果一个类的方法或者变量被protected修饰,对于同一个包的类,这个类的方法或变量是可以被访问的。对于不同包的类,只有继承于该类的类才可以访问到该类的方法或者变量。
public:被public修饰的方法或者变量,在任何地方都是可见的。
Java中所谓的“friendly”和“default”都只是一种说法,并不是说真有那么一个指定默认访问权限的关键字(default倒的确是个语言关键字,但那是用在switch语句中的)。
Java中类的成员权限修饰符只有三个:public/private/protected。
当一个类的成员前面没有任何访问权限修饰符修饰时,我们就说他是“fiendly权限”,或者“default权限”(注意,只是这样“说”,并不是说你可以那样写上去)。
说明你对成员的封装等级一块的知识没有搞懂。
首先java关于成员的封装关键字有三个:public、protected和private。
但是成员的封装等级有四种,除了上面三个外,还有一个是没有加“封装”关键字的等级。
就像你在class A中的int a一样。
这个int a可以是 public int a;或者protected int a; 或者private int a;还可以直接int a;
这代表了这个成员的四种封装等级。
程序中的a没有加关键字,则是一种被称为“package”的等级,这种等级的可见度是class和package,但是对于subclass是不可见的。
所以程序中,java1虽然继承了A类,但是父类中的成员a已经在子类中变为不可见的了,所以你在子类中用到A中的a就错了:System.out.println(one.a);
修改的办法是将class A改为:
class A {
public int a = 10; //public和protected都可以
}
java有四种访问权限修饰符,分别是:public、protected、private和包访问(即默认,什么都不加)。
private,只有本类可以访问。
protected,本类、相同包、其它包中的子类可以访问。
public本类、相同包、其它包都能访问。
包访问(默认),相同包可以访问。