栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java的访问属性控制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java的访问属性控制

        同一包中                               不同包中
  同一类中  同一包中[的子类]     不同包中的子类       不同包中的非子类
public        √               √                 √                    √
protected        √               √                 √                    ×
default        √               √                 ×                    ×
private        √               ×                 ×                    ×

1、public

在自己类中可以随便调用;同一包下不同类中不用import,创建类对象后随便调用;不同包下import后创建类对象随便调用,无论是不是子类。

2、protected

区分于public:在不同包下的非子类不能调用。

 模板1) test包下的父类test2:

package test;
public class test2
{
	int number = 0;
	public test2(int number)
	{
		this.number = number;
	}
	protected void getNumber()
	{
		System.out.println(number);
	}
	public static void main(String[] args)
	{
		test2 test = new test2(1);
		test.getNumber();
	}
}

模板2) test3包下的test3子类,调用test2的protected方法(注意这里是通过其子类对象来间接调用,因为不同包下的父类和子类,不能直接通过父类对象去访问子类的非public成员):

package test3;
import test.test2;
public class test3 extends test2
{
    //继承构造函数带有参数需要重写构造函数,并在函数体中调用父类构造函数
	public test3(int number)
	{
		super(number);
	}
	public static void main(String[] args)
	{
		test3 t3 = new test3(1);
		t3.getNumber();
	}
}                                                                                                                                 

编译运行一下:

javac -d . test2.java
javac -d . test3.java
java test3.test3

 运行结果:

1

将模板2)中的test3改成非子类,调用test2的protected方法:

package test3;
import test.test2;//两个包在同一级可以这样调用
public class test3
{
	public static void main(String[] args)
	{
		test2 t2 = new test2(1);
		t2.getNumber();
		
	}
}                                                                                                                                 

编译报错:

错误: getNumber() 在 test2 中是 protected 访问控制
                t2.getNumber();

说明protected修饰的成员在不同包的非子类中不能调用。

3、default(默认)

区分于protected:在不同包下的子类不能调用。

把模板1)中的getNumber方法改为默认修饰符

package test;
public class test2
{
	int number = 0;
	public test2(int number)
	{
		this.number = number;
	}
	void getNumber()
	{
		System.out.println(number);
	}
	public static void main(String[] args)
	{
		test2 test = new test2(1);
		test.getNumber();
	}
}

模板2)不变 

编译一下:

javac -d . test2.java
javac -d . test3.java

在编译test3.java时报错:

 错误: 找不到符号
                t3.getNumber();

说明默认修饰的成员在不同包的子类中不能调用。

4、private

 只能在自己类中调用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832238.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号