封装性----面向对象三大特性之一

今天重温封装性,在原来比较较混乱的理解上有了更加深层次的认识。主要是通过一个代码举例来表现的,具体如下:

第一个例子:

/*
 * 面向对象一:封装与隐藏
 * 
 * ----封装性的体现:
 * 将类的属性xx私有化(private),同时,提供公共的(public)方法来获取(getxx)和设置(setxx)此属性的值
 * 
 */
public class PrivateTest {

	public static void main(String[] args) {
		
		//实例化Animal
		Animal a = new Animal();
		//调用Animal的属性
		a.name = "大黄";
		a.setAge(0);
//		a.age = 1;
		/*
		 * 但实际问题限制:legs是不可能是负数的
		 * ---->在实际开发中可能会有额外的限制
		 * 这些限制条件,在属性声明的时候体现,是有困难的
		 * 因为在给属性赋值的时候,通过属性声明只能体现类型,只要在声明的类型所表示的范围内的话,是不会报错的
		 * 
		 * 思考:如何给属性加一个限制,使得赋值的时候只能赋整偶数呢?
		 * 其实,限制赋值为整的偶数,其实就是一个if-else语句
		 * ---->通过方法来实现
		 * 一个专门给legs属性赋值的方法
		 * 
		 */
//		a.legs = 4;//The field Animal.legs is not visible
		a.setLegs(6);
		//显示基本信息是什么
		a.show();
	}
	
}


class Animal{
	
	String name;
	
	private int age;
	
	/*
	 * 一方面,提供一个方法,通过方法写限定条件,给属性赋值
	 * 另一方面,通过权限修饰符,应该把直接调属性的操作给禁掉
	 * ---->实现这个属性的封装
	 * 属性存在于类当中
	 * 只可以通过某些函数(接口)来调用它,
	 * 使得对外不能直接看到它
	 * 当造一个对象的时候,堆空间中会加载对象的属性,其中一定会有legs这个属性
	 * 只是与其他属性存在区别,它的权限很小,用户不能通过对象直接调用它
	 */
	//以下属于稍微完整的关于类的属性的封装性的体现
	private int legs;//腿的个数
	//给legs属性赋值的方法
	public void setLegs(int l) {
		if(l >= 0 && l % 2 == 0 ) {
			legs = l;
		}else {
			//如果legs是一个负数,或者奇数的情况
			//把legs设置成一个默认的数
			legs = 0;
			//或者是抛出异常也可以
		}
	}
	//获取属性值的方法
	public int getLegs() {
		return legs;
	}
	
	public void eat() {
		System.out.println("动物进食");
	}
	//输出属性信息
	/*
	 *谁调用的show(),显示输出的属性就是谁的 
	 */
	public void show() {
		System.out.println("name = "+name+"',age = "+age+",legs = "+legs);
	}
	
	public void setAge(int a) {
		if(a > 0 ) {
			age = a;
		}else {
			System.out.println("输入的年龄有误!");
			//如果输入的年龄有误,应该在提醒的同时,结束此次输入
			System.exit(0);
		}
	}
	public int getAge() {
		return age;
	}
	
}

第二个例子:

public class PersonTest {
	public static void main(String[] args) {
		Person b = new Person();
		
//		b.age = 23;//编译不通过
		b.setAge(23);
		System.out.println("年龄为:"+b.getAge());
	}
}


class Person{
	
	private int age;
	
	public void setAge(int a) {
		if(a > 0 && a < 130) {
			age = a;
		}else {
			//throw new RuntimeException("传入的数据非法!");
			System.out.println("传入的数据非法!");
		}
	}
	
	public int getAge() {
		return age;
	}
}

学习不止!
路漫漫其修远兮,吾将上下而求索。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值