在java中,访问修饰符有以下几种,public、protected、默认和private,它们的使用情况如下:
下面举例说明(重要的说明在代码的注释中)。
例1:
/*
* 作者:百曉生
* 日期:2016年1月29日
* 功能:访问修饰符在不同类中的使用情况
* */
public class Test {
public static void main(String[] args) {
Student std1 = new Student();
std1.num = 1;
std1.name = "叶修";
std1.age = 25;
//std1.sex = '男'; //private的属性(变量)或方法(函数)只能在其定义的本类中使用
std1.eat();
std1.speak();
std1.run();
//std1.jump(); //理由同12行
}
}
class Student {
public int num;
protected String name;
int age;
private char sex;
public void eat() {}
protected void speak() {}
void run() {}
private void jump() {}
}
例2:(Test.java在pkg1包中,Student.java在pkg2包中)
Test.java:
/*
* 作者:百曉生
* 日期:2016年1月29日
* 功能:访问修饰符在不同包中的使用情况
* */
package pkg1;
import pkg2.Student;
public class Test {
public static void main(String[] args) {
Student std1 = new Student();
std1.num = 1;
//std1.name = "叶修"; //当Student类在另一个包中时,可以发现除了public外,其它的属性或方法都无法直接使用
//std1.age = 25;
//std1.sex = '男'; //private的属性(变量)或方法(函数)只能在其定义的本类中使用
std1.eat();
//std1.speak();
//std1.run();
//std1.jump(); //理由同14行
}
}
Student.java:
package pkg2;
public class Student {
public int num;
protected String name;
int age;
private char sex;
public void eat() {}
protected void speak() {}
void run() {}
private void jump() {}
}
例3:
Test.java:
/*
* 作者:百曉生
* 日期:2016年1月29日
* 功能:访问修饰符在子类中的使用情况
* */
package pkg;
import pkg1.College_student;
public class Test {
public static void main(String[] args) {
College_student cstd1 = new College_student();
cstd1.num = 101;
cstd1.name = "苏沐秋"; /*这里需要指出的是,当在同一个包下时,protected和默认修饰符的功能是一致的;
只有当子类和父类不在同一个包中时,才可以发现着两种修饰符的区别*/
//cstd1.age = 25;
//cstd1.sex();
cstd1.eat();
cstd1.speak();
//cstd1.run();
//cstd1.jump();
}
}
Student.java:
package pkg;
public class Student {
public int num;
protected String name;
int age;
private char sex;
public void eat() {}
protected void speak() {}
void run() {}
private void jump() {}
}
在pkg1包中的College_student.java:
package pkg1;
import pkg.Student;
public class College_student extends Student{
}
所有代码均在win7系统下jdk1.7的eclipse下运行通过。