Java面向对象的三大特性之封装

 

 



一:面向对象的三大特性;



  • 封装
  • 继承
  • 多态




二:封装的概念;



 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问;

 

  封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

 

  要访问该类的代码和数据,必须通过严格的接口控制。

 

  封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

 



三:封装的好处;



  1.只能通过规定的方法访问数据

  2.隐藏类的实例细节,方便修改和实现

  3.类内部的结构可以自由修改

 



四:实现Java封装的步骤;



1.修改属性的可见性;

如:

java Long封装对象应该占多少字节 java对象和封装_封装

2.创建getter/setter方法;

如:

java Long封装对象应该占多少字节 java对象和封装_构造方法_02

3.在getter/setter方法中加入属性控制语句;

  对属性值的合法性进行判断

4.举个例子:

部分讲解在注释,请留意。

java Long封装对象应该占多少字节 java对象和封装_封装_03

我们应该用封装的方式将我们的属性信息隐藏起来,给用户一个特定的方式访问数据

所以我们在源代码的变量加private修饰符

代码如下:

 



public class Telphone {
    private float screen;
    private float cpu;
    private float mem;
    //自己创建的构造方法
    public Telphone(){
        System.out.println("无参的构造方法执行了");
    }
    public Telphone(float newScreen,float newCpu,float newMem){
        screen = newScreen;
        cpu = newCpu;
        mem =newMem;
        System.out.print("有参的构造方法执行了");
    }
}



 

于是现在不允许用户随便访问默认的值了

java Long封装对象应该占多少字节 java对象和封装_System_04

如何访问呢,我们使用set/get方法访问

代码如下:

Telphone类:



package com.test;

//1.定义一个类
public class Telphone {
    private float screen;
    private float cpu;
    private float mem;
    //自己创建的构造方法
    
    //创建一个get方法获得属性Screen的值
    public float getScreen(){
        return screen;
    }
    //创建一个set方法传入参数
    public void setScreen(float newScreen){
        screen =newScreen;
    }
    public Telphone(){
        System.out.println("无参的构造方法执行了");
    }
    public Telphone(float newScreen,float newCpu,float newMem){
        screen = newScreen;
        cpu = newCpu;
        mem =newMem;
        System.out.print("有参的构造方法执行了");
    }
}



InitailTelphone类:

 



package com.test;

public class InitailTelphone {

    public static void main(String[] args) {
        
    
    Telphone phone2 = new Telphone(5.0f,1.4f,2.0f);
    //phone2.cpu = 5.2f;//在这个例子中,用户可以通过phone2这个对象直接修改我们的原始数据,
                      //这样是不安全的
    //通过封装方法set方法得到属性Screen的值
    phone2.setScreen(6.0f);
    System.out.println();
    System.out.println("screen:"+phone2.getScreen());
    }
}



 

这里我们使用了set方法传入参数并通过get方法获取了Screen值的属性

运行结果为:

java Long封装对象应该占多少字节 java对象和封装_构造方法_05

 

所以封装就是隐藏属性,通过方法来得到属性

其中set方法用来传入参数,get方法用来获取参数