您的位置:首页 > 编程语言 > Java开发

java中的四种修饰符详解

2017-03-22 17:39 281 查看
Java中的四个修饰符号。

private 仅对本类可见。

protected 对本包和所有子类可见。

默认(未声明任何修饰符)对本包可见。

public 对所有的都可见。

怎么去理解这四种修饰符呢?先来看一下我们的项目结构图。



在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);

}
}


至于输出结果我相信大家应该都会知道!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 继承 class