private protected public default

来源:互联网 发布:javascript实战项目 编辑:程序博客网 时间:2024/05/17 09:13

  JAVA类中的属性 或者方法有四个修饰符 public,private,protected,default

 

 一、public

public修饰的属性和函数表示在任何类路径中都能访问,无论该类是不是在同一个包中

 例如:

package test;

public class C { public int a=5;

}

package test1;

import httpclienttest.C;

public class D {public static void main(String[] args) { C c = new C();System.out.println(c.a);//虽然不在同一个包可以在test1包中访问到test包C中的public变量a,输出5}

二、private

private修饰的变量和函数只能在本类中使用

package test;

public class C {

private int a=5;

}

package test1;

import httpclienttest.C;

 

public class D {

public static void main(String[] args) {

C  c = new C();

System.out.println(c.a);编译错误无法访问 //C,D在不同包中的类,即使 在同一个包中不同类访问,都会爆编译错误

 

}

三、protected

protected修饰的属性和函数只能被在本包中的其他类,或者本类中被访问或者在子类中可以被访问,

(在子类中被访问并不是说可以在子类中直接new一个父类对象X【当然如果子类和父类在同一个包中是可以直接访问父对象的属性和方法的】,

,【如果子类父类不在同一个包中】然后通过X.属性或者X.方法去访问父类的属性方法,这样会编译错误)。

package test;

public class C {

public int a=5;

protected int s=1;

 

}

package httpclienttest;

 

import test.C;

 

public class A extends C {

 

public static void main(String[] args) {

C c = new C();

 

System.out.println(c.s);//编译错误A和C不在同一包中

}

}

如何正确访问?

public class A extends C {

 

public static void main(String[] args) {

A a  = new A();

System.out.println(a.s);//编译通过,可以正常访问

//System.out.println(c.s);//编译错误

}

}

所以说protected所说的在子类中可以的访问含义并不是直接获取父类对象访问(而是针对继承而言,protected修饰的方法和属性可以被继承,重载,重写),

而是通过生成子类对象去访问所继承的属性和方法

 

四、default(friendly)

默认不加修饰符表示friendly,该修饰符的范围表示在本类或者本包中的类可以访问

package httpclienttest;

 

public class B {

 

int s=5;//无修饰符表示friendly

 

 

}

package httpclienttest;

 

public class A {

 

public static void main(String[] args) {

       B b = new B();

       System.out.println(b.s);//A和B在同一包中编译通过输出5

}

}


 

 

 

 

原创粉丝点击