java面向对象之封装

面向对象的三大特征:封装,多态,继承

面向对象——封装:

封装的概念:

  封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

封装的步骤:

  1、使用private参数修饰该成员变量(private是私有的,只能在本类中进行访问,public是公共的,所有类都可以访问)

  2、使用一种公共方法对每个参数进行赋值,用于对外访问

封装的好处(个人认为):

  1、能够起到保护作用,其他人并不能直接对成员变量进行赋值,并且可以通过公共类对赋值的参数进行控制,避免输入错误的参数

  2、操作相对简单(高内聚,低耦合),其他人只需要调用公共方法就可以操作该类;(另外对于IDEA来说,Alt+insert可以快速对成员变量进行封装,避免手写的烦恼)

  3、能够隐藏功能的实现

实例:

需求:使用封装的方法实现一个简单的计算器

需求分析:首先要实现计算器,必须的参数是两个数字和一个符号,所以成员变量就可以定为data1,data2,symbol,另外对于计算器而言,只关心输出结果,所以我封装的时候并不需要设置getter方法,另外对于符号,得做基本的控制,不能输入非运算符也进行处理,鉴于此,实现代码如下:

实现1:单独对每一个参数进行封装(分别设置setter方法)

package Counter;

public class Calculator1 {

    private int data1;
    private int data2;
    private char symbol;
    //对private类型的参数进行单独封装
    public void setData1(int data1) {
        this.data1 = data1;
    }
    public void setData2(int data2) {
        this.data2 = data2;
    }
    public void setSymbol(char symbol) {
        this.symbol = symbol;
    }
    //定义一个公共方法,实现计算的功能
    public void  Cal(){
        int result;
        if(symbol=='+'){
            result = data1 +data2;
        }else if(symbol=='-'){
            result = data1-data2;
        }else if(symbol == '*'){
            result = data1*data2;
        }else{
            result = data1/data2;
        }
        System.out.println("使用方法1计算的结果: "+result);
   }
}

方法2:定义一个公共方法,用于整体的赋值:

package Counter;

public class Calculator {
    private int data1;
    private int data2;
    private char symbol;

    //定义一个公共方法,用来传参数          这样写的好处是可以将参数控制在一个方法中,更加方便,也可以分开写 比如Calculator1类;
    public void setData(int data1,int data2,char symbol){
        //因为只做整形数据的运算,所以对待输入数字不必要做校验;
        this.data1 = data1;
        this.data2 = data2;

        //对于运算符需要做判断,万一输入非运算符,比如A,?等;
        if (symbol == '+'|| symbol == '-'|| symbol == '*' ||symbol =='/'){
            this.symbol = symbol;
        }else {
            this.symbol = '+';
        }
    }
    //定义一个公共方法,实现计算的功能;
    public  void  Cal(){
        int result = 0;

        switch(symbol){
            case '+':
                result = data1+data2;
                break;
            case '-':
                result = data1-data2;
                break;
            case '*':
                result = data1*data2;
                break;
            case '/':
                result = data1/data2;
                break;
        }
        System.out.println("使用方法2计算的结果: "+result);
    }
}

这样计算器类就基本写好了,来尝试调用它,看看结果

package Counter;

public class Main {

    public  static void main(String[] args){

        //方法1:调用Calculator1的set方法 设置参数(每个参数单独设置,比较麻烦)
        Calculator1 cc = new Calculator1();
        cc.setData1(7);
        cc.setData2(9);
        cc.setSymbol('*');
        cc.Cal();
        
        //方法2:调用Calculator的setData方法设置参数
        Calculator c = new Calculator();
        c.setData(3,4,'/');
        c.Cal();
    }
}

这样输出的结果如下(值是随便定义的):

Files\Java\jdk1.8.0_181\jre\lib\rt.jar;D:\mytest\out\production\mytest" Counter.Main
使用方法1计算的结果: 63
使用方法2计算的结果:0

Process finished with exit code 0

——————————————————————————————————————————————————————————————————————————————————————————————————————————————

说明:作为一个java菜鸟,目前处于学习阶段,平时也在工作,晚上会上一个小时左右的课,基本上会在工作之余通过博客去整理回顾昨天的学习内容,希望能有所积累和提升,如果有人能看到文章,如果发现不对的地方,欢迎指正

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

posted @ 2020-04-03 10:54  柚子李子  阅读(238)  评论(0编辑  收藏  举报