类的封装(访问修饰符)

封装:类的设计者把类设计成一个黑盒子,使用者只能看见类中定义的公共方法,而看不见方法的实现细节,也不能直接对类中的数据进行操作。

 

根据封装的原则,使用者可以访问类中的部分方法,但不能直接访问成员变量。

Java通过设置访问权限来实现类的封装。

 

访问修饰符允许的访问级别  如下图所示:


 

设置类的访问权限

在声明一个类时,可以不用权限修饰符,也可以用public设置类为公有的,不允许使用其他的权限修饰符。

 

package com.ez;
/**
 * 访问修饰符测试类  访问严格级别从低到高 public-->protected-->default(nodecorate)-->private
 * 类中的数据称为成员变量,对数据进行的操作称为成员方法。类内部的构成,统称类的成员。
 * @author 窗外赏雪(EZ编程网)
 */
public class AccessModifier {

	public void testPublic() {
		System.out.println("该类成员可被所有类的成员访问");
	}

	/**
	 * 不能被其他包的非子类访问,并且非静态成员只能通过子类实例来访问。
	 * 注意:非静态成员只能通过子类的实例访问。
	 */
	protected void testProtected() {
		System.out.println("该类成员可以被其他包的子类实例访问");
	}
	
	protected static void testStaticProtected(){
		System.out.println("该类成员可以被其他包的子类访问");
	}
	
	void testNoDecorate() {
		System.out.println("该类成员能被同一类中的其他成员、或同一包中的其他类访问");
	}

	private void testPrivate() {
		System.out.println("该类成员只能被同一类中的其他成员访问");
	}

	/**
	 * private方法只能被自己类的成员访问
	 */
	public static void main(String[] args) {
		AccessModifier am = new AccessModifier();
		am.testPrivate();
		am.testNoDecorate();
		am.testProtected();
		am.testPublic();
	}

}

 

同个包下的其他类

package com.ez;
/**
 * protected类成员能被同一包下的类成员访问
 * default类成员能被同一类中的其他成员、或同一包中的其他类访问
 * @author 窗外赏雪(EZ编程网)
 */
public class AccessModifierTest {
	public static void main(String[] args) {
		AccessModifier am=new AccessModifier();
		am.testNoDecorate();
		am.testProtected();
		am.testPublic();
	}
}

 同个包下的子类

package com.ez;
/**
 * protected类成员能被同一包下的类成员访问。
 * default类成员能被同一类中的其他成员、或同一包中的其他类访问
 * @author 窗外赏雪(EZ编程网)
 */
public class AccessModifierChildTest extends AccessModifier{
	public static void main(String[] args) {
		AccessModifier am=new AccessModifier();
		am.testNoDecorate();
		am.testProtected();
		am.testPublic();
	}
}

 

不同包下的其他类

package com.ez.other;

import com.ez.AccessModifier;
/**
 * protected不能被其他包的非子类访问,并且非静态成员只能通过子类对象来访问。
 * default类成员不能被不同包中的其他类访问
 * @author 窗外赏雪(EZ编程网)
 */
public class AccessModifierTest {
	public static void main(String[] args) {
		AccessModifier am=new AccessModifier();
		am.testPublic();
	}
}

 不同包下的子类

package com.ez.other;

import com.ez.AccessModifier;

/**
 * protected不能被其他包的非子类访问,并且非静态成员只能通过子类实例来访问。注意:是子类实例
 * default类成员不能被不同包中的其他类访问
 * @author 窗外赏雪(EZ编写网)
 */
public class AccessModifierChildTest extends AccessModifier {
	public static void main(String[] args) {
		AccessModifier am = new AccessModifier();
		am.testPublic();
		AccessModifierChildTest amc = new AccessModifierChildTest();
		amc.testProtected();
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值