Java-面向对象(基础篇)--封装性

原创 2016年08月28日 22:03:00

封装性
封装性是面向对象的第一大特性,所谓的封装性就是指对外部的不可见性。问题如下:

class Person{
    String name ;           // 声明姓名属性
    int age ;               // 声明年龄属性
    public void tell(){
        System.out.println("姓名:" + name + ",年龄:" + age) ;
    }
};
public class EncDemo01{
    public static void main(String arsgh[]){
        Person per = new Person() ; // 声明并实例化对象
        per.name = "张三" ;           // 为name属性赋值
        per.age = -30 ;             // 为age属性赋值
        per.tell() ;
    }
};

程序运行的结果如下:

姓名:张三,年龄:-30

由上面程序可以发现,年龄(age)赋值为-30岁,这在程序中没有任何问题,但是在实际生活中这显然是不合法的数据,因为人的年龄不可能是-30岁。所以为了避免程序中发生这样的错误,在一般的开发中往往将类中的属性封装(private),封装的格式如下:
【封装格式】

属性封装:private 属性类型 属性名称
方法封装:private 方法返回值 方法名称(参数列表){}

【为程序增加封装属性】

class Person{
    private String name ;           // 声明姓名属性
    private int age ;               // 声明年龄属性
    public void tell(){
        System.out.println("姓名:" + name + ",年龄:" + age) ;
    }
};
public class EncDemo02{
    public static void main(String arsgh[]){
        Person per = new Person() ; // 声明并实例化对象
        per.name = "张三" ;           // 为name属性赋值
        per.age = -30 ;             // 为age属性赋值
        per.tell() ;
    }
};

程序运行结果为:

EncDemo02.java:11: 错误: name可以在Person中访问private
                per.name = "张三" ;                     // 为name属性赋值
                   ^
EncDemo02.java:12: 错误: age可以在Person中访问private
                per.age = -30 ;                         // 为age属性赋值
                   ^
2 个错误

本程序在属性前面加了private,进行了封装,所以不能由对象直接进行访问,这样就可以保证对象无法直接去访问类的属性,从而保证对入口处有所控制。需要进行访问时,在Java开发中对于私有属性的访问有了明确的规定:只要是封装的属性,则必须通过setter和getter方法设置和取得。
在程序中可以通过setter和getter方法进行设置和取得属性,如果想对设置的值进行检查,则只需要在setter()方法中加入检查的代码即可。
【加入检查代码】

class Person{
    private String name ;           // 声明姓名属性
    private int age ;               // 声明年龄属性
    public void setName(String n){  // 设置姓名
        name = n ;
    }
    public void setAge(int a){      // 设置年龄
        if(a>=0&&a<=150){           // 加入验证
            age = a ;
        }
    }
    public String getName(){        // 取得姓名
        return name ;
    }
    public int getAge(){            // 取得年龄
        return age ;
    }
    public void tell(){
        System.out.println("姓名:" + name + ",年龄:" + age) ;
    }
};
public class EncDemo04{
    public static void main(String arsgh[]){
        Person per = new Person() ; // 声明并实例化对象
        per.setName("张三") ;     // 调用setter设置姓名
        per.setAge(-30) ;           // 调用setter设置年龄
        per.tell() ;                // 输出信息
    }
};

程序运行结果:

姓名:张三,年龄:0

.因为设置了检查代码,所以年龄设置不正确,则不会把值赋给age属性的,所以运行结果为默认属性值0.
关于private的补充说明
(1) 在以后的开发中,类中的属性都必须封装,封装之后的属性值必须通过setter和getter方法访问。
(2) 面向对象的封装性本身并不是单单指private关键字。
(3) 正常情况下,类中的方法直接写上方法名就可以进行调用,但是如果要强调是本类中的方法,可以在调用时按“this.方法名称”的形式调用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java面向对象基础 封装性

对于刚学习java的人来说可能不知道 封装性的好处,感觉麻烦,封装有很多好处。最主要的目的就是 保护内容。保证某些属性或者方法不被外部看见。 类的封装性即不能让外面的类随意修改一个类的成员变...

Java面向对象基础---名词概念的理解:方法的重载、构造函数、封装性

方法的重载:方法名称相同,但参数的类型和个数不同,通过传递参数的个数及类型不同以完成不同功能的方法调用。 例如:System.out.println();属于方法的重载。 方法的重载一定是根据参数类型...
  • waldmer
  • waldmer
  • 2013年09月02日 11:19
  • 1352

Java基础(极客)——10、Java面向对象的基本特征之一:封装性

/**  * 1、Java封装性的使用  *   * 分装性:保护当前类的某些属性和方法不被外部所看见  */ public class FenzhaungDemo1 {     public s...

面向对象基础-封装性

  • 2012年09月06日 20:15
  • 624KB
  • 下载

Java基础知识_day07_(面向对象,构造方法,封装,成员变量与局部变量)

面向对象思想 面向对象特性-封装 构造方法 类名作为形式参数及返回值

黑马程序员——Java基础——面向对象(1)封装

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Java基础——面向对象(1) 一、面向对象概述 1、概念 面向对象...
  • Huberry
  • Huberry
  • 2014年09月03日 17:41
  • 253

java零基础入门知识2.1——封装(面向对象的特征之一)

封装知识点总结,一些重要知识点的琐碎整理。 封 装(面向对象特征之一):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。 好处:将变化隔离;便于使用;提高重用性;安全性。 封装原则:将不需要对外...

Java基础(7):面向对象三大特性—封装、继承和多态的详解

一、封装(encapsulation) 从表面意思来看就是封闭的包装。而Java中,一个类有属性和方法,但是不可能想修改就修改,毫无安全性可言,而且有的类只适用于某一场景,其内部的方法和属性不对外开放...

java基础<面向对象>总结(函数、封装、继承、多态)

基础篇----面向对象: 1:面向对象之函数: 定义:函数就是定义在类中的具有特定功能的一个小程序,又叫做方法。 特点:a。可以对功能代码进行封装;b。便于对该功能的复用;c.提高了代码的复用性;...
  • Kern_
  • Kern_
  • 2014年08月19日 12:20
  • 446

黑马程序员Java基础第四章-----面向对象的概念及封装

------http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一.面向对象 1....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java-面向对象(基础篇)--封装性
举报原因:
原因补充:

(最多只允许输入30个字)