Java封装性

封装的基础实现

在Java中所有面向对象的概念都是以类与对象的关系为主的,那么首先我们通过一个例子解释为什么需要提供封装性

观察如下代码:

class Person{
    String name;
    int age;
    public void tell(){
        System.out.println("姓名:"+name+",年龄:"+age);
    }
}

public class MyClass {
    public static void main(String[] args){
       Person person = new Person();
       person.name = "张三";
       person.age = -30;
       person.tell();
    }
}
  • 运行结果:姓名:张三,年龄:-30
  • 此时的代码没有语法错误,但是从现实的角度来讲,这个代码是有错误的且问题严重(年龄:-30)。这样的错误严格来讲属于业务错误
  • 错误原因在于当前类的属性可以直接被类外部的对象调用,所以此时我们认为这样的操作是属于不安全的操作。因此需要解决的问题是将内部的属性保护起来,即:不让外部直接操作,为此在Java中提供了private关键字,利用此关键字可以实现封装

封装性代码如下:

class Person{
    private String name;
    private int age;
    public void tell(){
        System.out.println("姓名:"+name+",年龄:"+age);
    }
}

加入private之后,就表示此时name和age两个属性只能够被Person访问

  • 现在发现,使用了private定义的属性,类的外部不能够直接访问,所以安全性是最高的
  • 如果现在需要通过对象操作类中的属性,在Java中就有了一个明确的要求:可以使用settergetter方法取得封装性内容,以private String name;为例:
    设置数据public void setName(String n);
    取得数据public String getName();

使得外部可以访问:

class Person{
    private String name;
    private int age;
    public void tell(){
        System.out.println("姓名:"+name+",年龄:"+age);
    }
    public void setName(String n){
        name = n;
    }
    public String getName(){
        return name;
    }
    public void setAge(int n){
        if (age >0 && age < 200){
            age = n;
        }
    }
    public int getAge(){
        return age;
    }
}

public class MyClass {
    public static void main(String[] args){
       Person person = new Person();
       person.setName("张三");
       person.setAge(30);
       person.tell();
    }
}

此时经过封装后,外界访问属性需设置符合现实规律的值才可以显示(0<age<200),否则无法得到想要的结果

\color{red}{开发原则}:只要是类中的属性应使用private封装,封装后的属性必须严格按照要求编写settergetter方法

总结:

  • private声明的属性只能够被类的内部所访问
  • private声明的属性必须有对应的settergetter方法,而且方法名称要求按照严格标准编写
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容