• JAVA基础(十)封装


    封装

    面向对象共有三个特征:封装继承多态

    封装

    封装表现:
                   1、方法就是一个最基本封装体。
                   2、类其实也是一个封装体。
      从以上两点得出结论,封装的好处:
                                 1、提高了代码的复用性。
                                  2、隐藏了实现细节,还要对外提供可以访问的方式。

                                  3. 便于调用者的使用。这是核心之一,也可以理解为就是封装的概念。
                                  4、提高了安全性。

                  private 私有

     

    private:是私有化;

                           被private修饰的方法和属性只能在本类中使用;其他方法(main)不能调用和访问;
                             因为被private修饰的属性和方法不能被别的类使用,则需要写方法进行:

                                                                                           赋值set和调用get;给私有属性赋值,

                                                                                            调用私有方法

     

     

    代码例子


    了解到封装在生活的体现之后,又要回到Java中,细说封装的在Java代码中的体现,先从描述Person说起。
    描述人。Person
    属性:年龄。
    行为:说话:说出自己的年龄。

                      publicstaticvoid main(String[] args) {
    
                 perso p = new perso();
    
                         /*Person p=new Person();
    
                          *p.speak()因为在Person类中写好了输入语句的方法speak();
    
                          * 所以这里直接调用就行了;如果没有写System输出语句*/
                          *  则需要写System.out.println(p.getName()+"..."+p.getAge()) (=p.speak);
    
                          *  调取private修饰的属性需要:*/
    
                                               //  变量名.getName();
                               // 传参
                               p.setName("速战");
                               // 传参
                               p.setAge(23);
                               perso p1 = new perso();
                               // 传参
                               p1.setName("刚切");
                               // 传参
                               p1.setAge(24);
           /*
            * p.speak(); System.out.println(p.getName()+"..."+p.getAge());
            */
    
    }

    有个严重的问题,就是Person中的属性的行为可以任意访问和使用。这明显不符合实际需求。
    需要使用一个Java中的关键字也是一个修饰符 private(私有,权限修饰符)。只要将Person的属性和行为私有起来,这样就无法直接访问。

     

    class Person {
        //成员变量
          private  int age;
          private String name;
    
          public  void speak() {
    
           System.out.println("我叫" + name + ",今年" + age + "岁了。");
    
    }



    年龄已被私有,错误的值无法赋值,可是正确的值也赋值不了,加判断。

    一般对成员属性的访问动作:

                                        赋值(设置 set),

                                       取值(获取 get),

                                     因此对私有的变量访问的方式可以提供对应的 setXxx或者getXxx的方法。

     

    变量名.set(值)的方法进行private修饰后的属性赋值;

    class Person {
        // 私有成员变量
                   // 加私有
        private String name;
        // 加私有
        privateintage;
        // 对外提供设置成员变量的方法
    publicvoid setName(Sring n){
    name=n;
             /*name=n:等于this.name(this.name是成员变量的name就是private String name)=n
    (n是实例化对象传递过来要赋的值);
    */ }
    //对外提供访问成员变量的方法
        public String getName() {
           // 调用者调用方法,方法就返回给调用者
           returnthis.name; }
    
     publicvoid setAge(int a) {
            // 由于是设置成员变量的值,这里可以加入数据的验证
    
            if (a < 0 || a > 130) {
               System.out.println(a + "不符合年龄的数据范围");
                return;
            }
              age = a; }
        // 对外提供访问成员变量的方法
        public  void getAge() {
            returnage;//// 调用者调用方法,方法就返回给调用者
        }
    }
    
     


      总结:
                               类中不需要对外提供的内容都私有化,包括属性和方法。
                               以后再描述事物,属性都私有化,并提供setXxx getXxx方法对其进行访问。
                  注意:私有仅仅是封装的体现形式而已。

     publicclass demo01 {
        public static void main(String[] args) {
            perso p = new perso();
            // 传参
            p.setName("速战");
            // 传参
            p.setAge(23);
            perso p1 = new perso();
            // 传参
          p1.setName("刚切");
            // 传参
            p1.setAge(24);
            /*
             * p.speak(); System.out.println(p.getName()+"..."+p.getAge());
             */
            //传参
            boolean flag = p.compare(p1);
            //返回值  打印
            System.out.println(flag);
        }
    
    }
    public boolean compare(boolean p){
    return this.age=p.age;
    
    }
    1. 在main调用的方法是boolean flag=p.compare(p1);所以返回值是boolean型的所以这里compare()方法得用   
    boolean接;实际上就是:在main方法里p调用了Persong类中的compare()方法;
    2. 方法中return this.age=p.age;是用来比较的返回值是boolean型;

     

    publicclass perso {
        // 加私有
        private String name;
        // 加私有
       privateintage;
        // 出口
        publicvoid setName(String name) {
          this.name = name;
        }
        // 返回有返回值
        public String getName() {
            // 调用者调用方法,方法就返回给调用者
            returnthis.name;
        }
        // age 赋值有返回值
        publicvoid setAge(intage) {
            this.age = age;
        }
        // 取值有返回值
        publicint getAge() {
            // 调用者调用方法,方法就返回给调用者
            returnage;}
        // 判断是否是同龄人
        publicboolean compare(perso p)
    
            returnthis.age == p.age;}



        this.age是指p.age;p.age就是p2.age(在main方法中定义了Person对象p2);通过compare方法把p2对象传到了Person类compare方法中进行比较;然后将结果false返回给main里 的p.compare()对象调用的方法中;返回值也是boolean;
        this.age就是调用对象的age也就是p.age;=p.age是被比较者的age;是通过compare(Person p)传过来的(整个p对象,包含age属性);=p.age的age被传过来的p对象的age赋值并比较
    boolean flag=p.compare(p2);//这里是调的比较方法,返回值是boolean型的所以在Person类中compare()方法返回值用boolean接;

     

  • 相关阅读:
    SPOJ ROCK
    CodeForces 4C
    实现与研华PCI采集卡通讯
    C#常用数据结构
    使用USBCAN通讯
    COMMTIMEOUTS读写串行口超时
    Multithreading With C# Cookbook---Chapter5---使用C#6.0
    Multithreading With C# Cookbook---Chapter4---使用任务并行库
    Multithreading With C# Cookbook---Chapter3---线程池
    Multithreading With C# Cookbook---Chapter2---线程同步
  • 原文地址:https://www.cnblogs.com/layuechuquwan/p/11287622.html
Copyright © 2020-2023  润新知