美文网首页
Java封装性

Java封装性

作者: 南在南方i | 来源:发表于2020-02-09 18:23 被阅读0次

    封装的基础实现

    在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方法,而且方法名称要求按照严格标准编写

    相关文章

      网友评论

          本文标题:Java封装性

          本文链接:https://www.haomeiwen.com/subject/oljnxhtx.html