• Java面向对象三大特点之封装


    封装

    含义:将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对客户隐藏其实现细节,这就是封装的思想。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

    实现封装的步骤

    1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如:

    public class Person {
        private String name;//属性为私有的
        private int age;//属性为私有的
    }

    这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

    2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:

    public class Person{
        private String name;//属性为私有的
        private int age;
    ​
        public int getAge(){//取值方法,查询age的值
          return age;
        }
    ​
        public String getName(){
          return name;
        }
    ​
        public void setAge(int age){//赋值方法,修改age的值
          this.age = age;//this 关键字
        }
    ​
        public void setName(String name){
          this.name = name;
        }
    }

    采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。

    实例

    让我们来看一个java封装类的例子:

    public class EncapTest{
     
       private String name;//name,idNum,age属性为私有的
       private String idNum;
       private int age;
     
       public int getAge(){//查询age的值
          return age;
       }
     
       public String getName(){
          return name;
       }
     
       public String getIdNum(){
          return idNum;
       }
     
       public void setAge( int newAge){//修改age的值
          age = newAge;
       }
     
       public void setName(String newName){
          name = newName;
       }
     
       public void setIdNum( String newId){
          idNum = newId;
       }
    }

    以上实例中public方法是外部类访问该类成员变量的入口。

    通常情况下,这些方法被称为getter和setter方法。

    因此,任何要访问类中私有成员变量的类都要通过这些getter和setter方法。

    通过如下的例子说明EncapTest类的变量怎样被访问:

    public class RunEncap{
       public static void main(String args[]){
         
          //新建一个属于EncapTest类的对象encap
          EncapTest encap = new EncapTest();
    
          encap.setName("James");//对象encap调取setter方法给name赋值
          encap.setAge(20);//对象encap调取setter方法给age赋值
          encap.setIdNum("12343ms");//对象encap调取setter方法给name赋值
     
          System.out.print("Name : " + encap.getName()+ 
                                 " ,Age : "+ encap.getAge());
        }
    }

    以上代码编译运行结果如下:

    Name : James,Age : 20
  • 相关阅读:
    FJNU 1151 Fat Brother And Geometry(胖哥与几何)
    FJNU 1157 Fat Brother’s ruozhi magic(胖哥的弱智术)
    FJNU 1159 Fat Brother’s new way(胖哥的新姿势)
    HDU 3549 Flow Problem(最大流)
    HDU 1005 Number Sequence(数列)
    Tickets(基础DP)
    免费馅饼(基础DP)
    Super Jumping! Jumping! Jumping!(基础DP)
    Ignatius and the Princess IV(基础DP)
    Keywords Search(AC自动机)
  • 原文地址:https://www.cnblogs.com/jonsnow/p/6231627.html
Copyright © 2020-2023  润新知