文章目录
1、 封装应用的常见问题
1.1 如果不用封装,在要调用的普通成员方法中编写相关限制代码,实现避免在主方法中所调用属性及方法的值被非法篡改,这样不也可以吗,为什么一定要用封装?
在面向对象的设计思想中,封装可以理解为是一种利用抽象的函数接口实现细节信息的包装隐藏的方式。我们可以把封装认为是一个保护屏蔽,防止该类的私密代码和数据被外部类定义的代码随机访问和修改。简单来说,就是“按我的原则,才能玩我的游戏”。而在隐藏信息的同时,我们还要注意“职责单一”原则的应用,也就是“各司其职”。
如果只是从功能实现的角度来说,当然可以将限制代码写在任意的功能实现方法中,但是试想,如果一个类中,有10个功能性方法中需要针对某一属性进行相同的设定,我们是设置一次方便,还是设置十次更方便安全呢?
因此,适当的封装可以让代码更容易理解与维护,也加强了安全性。调用者不能随意通过“变量名.属性名”的方式来修改类中的私密数据信息;同时,在使用的时候,也只需直接调用封装后的方法即可,无需再操心细节处理。
1.2 get/set用两个方法实现取值、赋值,放在一个方法里不是更简单?是否可以改成别的名字呢?
如果仅仅是为了实现功能,那么,无论是写在一个方法里,还是用其他名字命名方法都是OK的。但是,在基于面向对象的编程思想中,更推荐大家采用get/set方法分别实现“取值”和“赋值”的功能,让他们“各司其职”,也更加“通俗易懂”,毕竟当业务越来越复杂,团队协作的时候,“约定俗成”回避“各有千秋”更有价值。
1.3 有了get/set方法,为什么还需要带参构造方法?或者说,在构造方法中直接写if…else…判断限制输入输出结果不行么,为什么要多些两个方法get/set?
构造方法与get/set方法的作用是不同的,构造方法只能在创建对象时进行调用,如果在对象创建完成后,再想对其某些属性进行赋值和取值,就无法再次应用构造方法啦。因此两者的存在并不冲突,我们可以应用带参构造在对象初始化时进行某些属性的设置,也可以通过get/set方法,在对象构建完成后进行后续修订。
1.4 main方法中为什么可以添加return?什么时候能加?有什么作用?是否可以用break进行替换?
关于return和break的应用:
- 当方法中出现return表示方法运行终止;当出现break则表示循环语句或者switch语句运行结束。
- 如果方法设置了返回值,那么必须出现return,应用return带回返回值;如果方法的返回值为void,也可以实现return,但是后面什么也不能加,直接加分号结束。
因此,主方法中的return语句不能与break随意替换。
1.5 private修饰的成员怎么用?
- 在同一个类中,可以直接访问。
- 在不同类中,需要通过对应的非私有方法访问。