java面向对象 封装_java面向对象之封装

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

面向对象——封装:

封装的概念:

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

封装的步骤:

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

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

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

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

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

3、能够隐藏功能的实现

实例:

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

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

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

packageCounter;public classCalculator1 {private intdata1;private intdata2;private charsymbol;//对private类型的参数进行单独封装

public void setData1(intdata1) {this.data1 =data1;

}public void setData2(intdata2) {this.data2 =data2;

}public void setSymbol(charsymbol) {this.symbol =symbol;

}//定义一个公共方法,实现计算的功能

public voidCal(){intresult;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:定义一个公共方法,用于整体的赋值:

packageCounter;public classCalculator {private intdata1;private intdata2;private charsymbol;//定义一个公共方法,用来传参数 这样写的好处是可以将参数控制在一个方法中,更加方便,也可以分开写 比如Calculator1类;

public void setData(int data1,int data2,charsymbol){//因为只做整形数据的运算,所以对待输入数字不必要做校验;

this.data1 =data1;this.data2 =data2;//对于运算符需要做判断,万一输入非运算符,比如A,?等;

if (symbol == '+'|| symbol == '-'|| symbol == '*' ||symbol =='/'){this.symbol =symbol;

}else{this.symbol = '+';

}

}//定义一个公共方法,实现计算的功能;

public voidCal(){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);

}

}

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

packageCounter;public classMain {public static voidmain(String[] args){//方法1:调用Calculator1的set方法 设置参数(每个参数单独设置,比较麻烦)

Calculator1 cc = newCalculator1();

cc.setData1(7);

cc.setData2(9);

cc.setSymbol('*');

cc.Cal();//方法2:调用Calculator的setData方法设置参数

Calculator c = newCalculator();

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计算的结果:0Process finished with exit code0

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值