关于java类的封装性的一点看法
来源:互联网 发布:魔方虚拟光驱软件下载 编辑:程序博客网 时间:2024/06/06 07:04
观察以下代码:
如果现在的年龄为负数,并不会影响程序的执行,但是从实际的生活角度来讲,没有一个人的年龄是-30岁,所以这样的数据就不应该设置上去。
因为现在类中的所有操作都是对外部可见的,可以直接访问的,此时就可以通过封装性来解决此问题。在java中封装有很多的体现,但是最简单的体现就是加入“private”关键字。
封装属性:private 数据类型 属性名称 = 默认值;
封装方法:private 返回值类型void 方法名称(参数列表);
下面按照此操作将类中的属性进行封装。
提示出错:
提示出错,证明现在的属性是安全的,可以自己保护了。但是,却无法进行操作了。
此时,已经可以访问类中的name和age属性,是通过间接的方式完成,但是此时并没有对输入的内容进行检查。就要在setAge里面加入限制条件
在访问本类中其他方法的时候,为了保证此方法是本类中定义的,可以在方法前加上this关键字:
this.方法()-->调用本类方法
package cr.tdtx.banjin.classtest;class People { String name;// 表示人的姓名 int age; //表示人的年龄 public void tell(){ System.out.println("姓名:"+name+",年龄:"+age); } }public class ClassTest3{ public static void main(String[] args){ People p = new People(); p.name = "张三"; p.age = -30; p.tell(); }}
如果现在的年龄为负数,并不会影响程序的执行,但是从实际的生活角度来讲,没有一个人的年龄是-30岁,所以这样的数据就不应该设置上去。
因为现在类中的所有操作都是对外部可见的,可以直接访问的,此时就可以通过封装性来解决此问题。在java中封装有很多的体现,但是最简单的体现就是加入“private”关键字。
封装属性:private 数据类型 属性名称 = 默认值;
封装方法:private 返回值类型void 方法名称(参数列表);
下面按照此操作将类中的属性进行封装。
package cr.tdtx.banjin.classtest;class People { private String name;// 表示人的姓名 private int age; //表示人的年龄 public void tell(){ System.out.println("姓名:"+name+",年龄:"+age); } }public class ClassTest3{ public static void main(String[] args){ People p = new People(); p.name = "张三"; p.age = -30; p.tell(); }}
提示出错:
提示出错,证明现在的属性是安全的,可以自己保护了。但是,却无法进行操作了。
此时给了一个重要的概念:只要属性就必须封装,被封装的属性通过setter及getter方法设置和取得,例如:name属性,setter:setName(),getter:getName()
package cr.tdtx.banjin.classtest;class People { private String name;// 表示人的姓名 private int age; //表示人的年龄 public void tell(){ System.out.println("姓名:"+name+",年龄:"+age); } public void setName(String n){ name = n; } public void setAge(int a){ age =a; } public String getName(){ return name; } public int getAge(){ return age; }}public class ClassTest3{ public static void main(String[] args){ People p = new People(); p.setName("张三"); p.setAge(-30); p.tell(); }}
此时,已经可以访问类中的name和age属性,是通过间接的方式完成,但是此时并没有对输入的内容进行检查。就要在setAge里面加入限制条件
public void setAge(int a){ if(a>=0&&a<200){ age =a; } }
在访问本类中其他方法的时候,为了保证此方法是本类中定义的,可以在方法前加上this关键字:
this.方法()-->调用本类方法
package cr.tdtx.banjin.classtest;class People { private String name;// 表示人的姓名 private int age; //表示人的年龄 public void tell(){ System.out.println("姓名:"+this.getName()+",年龄:"+this.getAge()); } public void setName(String n){ name = n; } public void setAge(int a){ if(a>=0&&a<200){ age =a; } } public String getName(){ return name; } public int getAge(){ return age; }}public class ClassTest3{ public static void main(String[] args){ People p = new People(); p.setName("张三"); p.setAge(-30); p.tell(); }}
- 关于java类的封装性的一点看法
- 关于linb的一点看法
- 关于跳槽的一点看法
- 关于新技术的一点看法
- 一点关于Ares的看法
- 关于Velocity的一点看法
- 关于积累的一点看法
- 关于积累的一点看法
- 关于中国教育的一点看法
- 关于MFC的一点看法
- 关于技术交流的一点看法
- 关于积累的一点看法
- 关于积累的一点看法
- 关于积累的一点看法
- 关于学习的一点看法
- 关于MVC的一点看法
- 关于html的一点看法
- java 学习的一点看法
- DW运行很慢,WINDOWS7上面Dreamweaver很慢的解决非方法
- __call__ 函数
- 插入法排序及原理
- net网站提高性能的方法
- CoreMotion框架-iOS设备的核心运动
- 关于java类的封装性的一点看法
- js输出字符串
- Content Provider
- HDU - 1104 Remainder 搜索
- Given final block not properly padded
- Tesseract-OCR 字符识别---样本训练
- 解决Oracle 11g空表不能导出
- gcc原子操作,AtomicIntegerT , gcc编译选项(11)
- 再谈OpenCV数据结构Mat详解