Java中的四个修饰符号。
怎么去理解这四种修饰符呢?先来看一下我们的项目结构图。
在thispackage里面定义了一个People类,以及一个子类ChinaPeople。在otherpackage里面也定义了一个ChinaPeople2的类,它也继承了People。【这样是为了区别出protected 对本包和所有子类可见(这里的子类可以不在同一个包下面),而 默认(未声明任何修饰符)仅仅只是对本包可见而已】
People类的代码
package thispackage; public class People { private String name; public int age; protected int phoneNumber; String address; public People(String name, int age, int phoneNumber, String address) { super(); this.name = name; this.age = age; this.phoneNumber = phoneNumber; this.address = address; } //(7)只有在这里在可以使用name,它的定义如下: // private String name; // 验证了private只有在本类才可以使用他。 public void OnlythisCalssCanUsePrivate() { System.out.println(name); } }
ChinaPeople的代码
package thispackage; public class ChinaPeople extends People {
public ChinaPeople(String name, int age, int phoneNumber, String address) { super(name, age, phoneNumber, address); } // 这里如果把 System.out.println(name);这行代码的注释给取消掉,就会报错。 // 原因是:尽管ChinaPeople这个类继承了people这个类 // 但是name在people这个类中被定义为private. // 所以在其子类中就不可以使用,但是age,phoneNumbere和address可以使用。 public void TestIfOtherCalssCanUsePeoplePrivate() { // System.out.println(name); System.out.println(age); System.out.println(phoneNumber); System.out.println(address); } }
TestMain的代码
package thispackage; public class TestMain { public static void main(String[] args) { People people = new People("Sunday-coder俊勇1", 21, 11111, "深圳"); // (1) 输出people对象的address,address定义为: // String address; System.out.println(people.address); // (2) 输出people对象的phoneNumber,phoneNumber定义为: // protected int phoneNumber; System.out.println(people.phoneNumber); // (3) 输出people对象的age,age定义为: // public int age; System.out.println(people.age); //这是一个继承了People类的子类ChinaPeople。 // 也就是说People类中一共定义的四个成员属性,只有protected和public和默认的可以直接使用. ChinaPeople chinaPeople = new ChinaPeople("Sunday-coder俊勇2", 22, 22222, "北京"); System.out.println(chinaPeople.phoneNumber); System.out.println(chinaPeople.address); System.out.println(chinaPeople.age); } }
ChinaPeopel2的代码
package otherpackage; import thispackage.People; public class ChinaPeopel2 extends People {
public ChinaPeopel2(String name, int age, int phoneNumber, String address) { super(name, age, phoneNumber, address); } //这里的phoneNumber属性可以访问,因为它被定义为protected的。 //而ChinaPeopel2继承了People这个类【ChinaPeopel2为people的一个子类】 public void ProtectCanBeUseInAllchildClass() { System.out.println(age); System.out.println(phoneNumber); // 注意这里的address属性不可访问了,因为ChinaPeopel2与People类不在一个包下面。 // 而address被定义为默认的访问属性,它是不可以在其他包里面可以访问的。 } }
TestMain2的代码
package otherpackage; import thispackage.People; public class TestMain2 { public static void main(String[] args) { People people = new People("Sunday-coder俊勇", 21, 11111, "深圳"); // 在这个包里面不能对peopel类中的protected和默认的属性进行访问, // 这里只有age可以访问到,因为它定义成了public。 // (4) 输入people对象的address,address定义为: // String address; // System.out.println(people.address); // (5) 输入people对象的phoneNumber,phoneNumber定义为: // protected int phoneNumber; // System.out.println(people.phoneNumber); // (6) 输入people对象的age,age定义为: // public int age; System.out.println(people.age); } }
至于输出结果我相信大家应该都会知道!!!