封装 第一步

在JAVA中,有一种很重要的东西叫封装(JAVA三大特性之一),简单来说,就是你不想让别人接触的东西可以自己锁起来,想让别人接触的东西,可以自己直接暴露出来 ,当然,这只是个比喻,因为封装并不是那么简单的。


什么 是封装:

提高数据安全属性,通过封装,隐藏属性和细节,提供接口给外部访问、调用

========================================================================================

未封装的class类,是可以随意访问的

class ClassObject{
	// 以下属性可以直接访问,并不会报错
	String name;
	Integer age;
	public void printObject(){
		System.out.println(name+"今年"+age+"岁了");
	}
}

class Test{
	public static void main(String[] args){
		ClassObject classObject = new ClassObject();
		//name/age并没有封装限制访问权限,所以可以直接访问、赋值
		classObject.name ="小明";
		classObject.age = 10;
		classObject.printObject();
	}
}

结果:小明今年10岁了

===========================================================================================================================

封装关键字之private,将属性或方法设置为私有的,只有在本类中方可使用

class ClassObject{
	//被private封装的属性或方法,在外部是无法直接使用的,只能在本类中方可使用 
	private String name;
	Integer age;
	public void printObject(){
		System.out.println(name+"今年"+age+"岁了");
	}
}

class Test{
	public static void main(String[] args){
		ClassObject classObject = new ClassObject();
		//name被private设置成了私有的,不能在外部访问
		classObject.name ="小明";
		classObject.age = 10;
		classObject.printObject();
	}
}

运行结果:

F:\a>javac -encoding utf-8 ClassObject.java
ClassObject.java:14: 错误: name可以在ClassObject中访问private
                classObject.name ="小明";
                           ^
1 个错误


=======================================================================================================================

那么如果所有的属性都被private限制了访问权限,再想访问、赋值给一些属性要如何操作?

答案很简单:写一个接口,开放给外部使用,这样可以控制用户的输入的数据,以达到拦截检测的效果

class ClassObject{
	//被private封装的属性或方法,在外部是无法直接使用的,只能在本类中方可使用 
	private String name;
	private Integer age;
	//开放接口给外部类调用,实现给属性name/age赋值的目地
	public void setName(String val){
		name =  val;
	}
	public void setAge(int val){
		age = val;
	}
	public void printObject(){
		System.out.println(name+"今年"+age+"岁了");
	}
}

class Test{
	public static void main(String[] args){
		ClassObject classObject = new ClassObject();
		//name被private设置成了私有的,不能在外部访问
		//classObject.name ="小明";
		//classObject.age = 10;
		
		//ClassObject类中的属性,可以通过我们提供的setName/setAge接口进行赋值
		classObject.setName("小二");
		classObject.setAge(10);
		classObject.printObject();
	}
}

==============================================================================================================

name/age属性被限制了外部的访问,如果我想获取ClassObject中的属性值 怎么办?

答案是:再写一个返回属性值 的方法

class ClassObject{
	//被private封装的属性或方法,在外部是无法直接使用的,只能在本类中方可使用 
	private String name;
	private Integer age;
	
	//开放接口给外部类调用,实现给属性name/age赋值的目地
	public void setName(String val){
		name =  val;
	}
	public void setAge(int val){
		age = val;
	}
	
	//开放获取name/age属性值 的方法
	public String getName(){
		return name;
	}
	public Integer getAge(){
		return age;
	}
	
	public void printObject(){
		System.out.println(name+"今年"+age+"岁了");
	}
}

class Test{
	public static void main(String[] args){
		ClassObject classObject = new ClassObject();
		//name被private设置成了私有的,不能在外部访问
		//classObject.name ="小明";
		//classObject.age = 10;
		
		//ClassObject类中的属性,可以通过我们提供的setName/setAge接口进行赋值
		classObject.setName("小二");
		classObject.setAge(10);
		classObject.printObject();
		
		//获取classObject类中的name/age属性值 
		String name = classObject.getName();
		Integer age = classObject.getAge();
		System.out.println("从classObject获取的name值为:"+name);
		System.out.println("从classObject获取的age值为:"+age);
	}
}
运行结果:

小二今年10岁了
从classObject获取的name值为:小二
从classObject获取的age值为:10





























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值