Java封装的概念详解
一:封装的概念
Java是一门面向对象的语言,面向对象就是一种以组件化模式进行代码开发的思想,面向对象的理解你需要学完整个课程才会有感觉,面向对象有
三个基本特征:封装、继承、多态。
今天学习的是封装,封装是一个非常广泛的概念,小到一个属性的封装,大到一个框架或者一个项目的封装,比如说我们后面学习的框架就是第三方封装好的api ( Application Programming Interface) 。今天我们看封装的最小概念(属性的封装)。
DEMO:观察代码
package com. bai . demo;public class Hello { public static void main(String[] args) { Person per=new Person( ); per . name="李四"; per .age=-10; System. out . println("我的名字是:"+per . name) ; System . out . println("我的年龄是:"+per.age) ; }}
此时的代码在语法上没有错误,但是在逻辑上出现了问题,因为一个的年龄不.可能是负数,出现这一问题的根本原因是外部程序能直接访问Person类中的属性age,如果要让其属性不能被外部访问那么我们可以使用一个关键字来封装属性,这个关键字是“private”表示私有的。
DEMO:封装属性
package com. bai . demo;//定义了一个规范人信息的类public class Person { //名字 String name ; //年龄 private int age;}
此时发现了外部程序不能访问age属性了,提示的错误是“这个属性不可见”那么如果一个属性不能访问就失去了本身意义,我们应该为这个封装的属性在内部提供方法(接口)来访问该属性,这样的方法需要两个:一个是取得该属性( getter方法),另外一个是为该属性赋值(setter 方法)
DEMO:提供setter和getter方法访问age属性
package com.bai . demo;//定义了一个规范人信息的类public class Person { //名字 String name; //年龄 private int age; public void setAge(int myage) { age=myage ; } public int getAge() { return age; } } package com. bai . demo;public class Hello { public static void main(String[] args) { Person per=new Person( ) ; Person per=new Person( ) ; per. name="李四"; per. setAge(-10); System. out. println("我的名字是:"+per . name) ; System. out . print1n("我的年龄是: "+per. getAge()); }}
}
有同学就说:折腾了半天依然可以是负数呀,不是白搞了吗?其实上当我们通过方法来访问属性的时候我们可以在方法中做-一些逻辑判断,让数据更完全。比如说我们可以在方法中判断你输入的年龄是否合理。
DEMO: setter 方法中判断年龄
package com. bai . demo;//定义了一个规范人信息的类public class Person { //名字. String name ; //年龄 private int age; public void setAge( int myage) { if(myage<=0||myage>200) {//如果传入 年龄为负数则使用默认值 age=10; }else { age=myage; }} public int getAge() { return age ; }}
package com. bai . demo ;public class Hello { public static void main(String[] args) { Person per=new Person( ); per. name="李四"; per.setAge(1000); System. out . println("我的名字是: "+per . name); System. out. println("我的年龄是: "+per. getAge()); } }
以上就是属性的封装,在开发中一个类的属性基本都要封装,尤其是简单Java类(JavaBean)需要封装,封装之后要为封装的属性提供setter个getter方法。
总结:
1、封装的好处:
●可以让程序内部结构更安全
●可以把重复的代码封装,之后再需要的地方进行调用,在一定程度上解决了代码的重复
2、今天学习的是封装的最小概念(属性的封装)
3、封装的属性要提供setter和getter方法
4、setter 和getter方法的书写规则:
●setter 方法: set+首写字母大写的属性名, 没有返回值(void),有参数。
●getter 方法: get+首写字母大写的属性名,有返回值,没有参数。