Java面向对象(查缺补漏——贰)
面向对象的三大特征:封装性,继承性,多态性
一、封装与隐藏
封装性的体现
我们程序的设计追求“高内聚”,“低耦合”
- 高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
- 低耦合:仅对外暴露少量的方法用于使用;
隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。
面向对象的特征一:封装性
一、问题引入:
当我们创建一个类的对象以后,我们可以通过“对象.属性”的方式,对对象的属性进行赋值。这里赋值操作要受到
属性的数据类型和存储条件范围的制约。除此之外,没有其它制约条件。但是,在实际问题中,我们往往需要给属性赋值
加入额外的限制条件。这个条件就不能在属性声明时体现出来,我们只能通过方法进行限制条件的添加(比如:setWife方法)
同时,我们需要避免用户再使用"对象.属性"的方式对属性进行赋值。则需要将属性声明为私有的(private)
-->此时针对属性就体现了封装性
二、封装性的体现
我们将类的属性xxx私有化(private),同时提供公共(public)的方法,获取(getXxx)和设置(setXxx)此属性的值
拓展:封装性的体现:①如上 ② 不对外暴露私有的方法 ③ 单例模式 .....
public class AnimalTest {
public static void main(String[] args) {
Animal animal = new Animal();
animal.name = "大黄";
animal.age = 1;
//animal.legs = 4; //'legs' has private access in 'com.nait.java.Animal'
//animal.wife//“wife”在“com.nait.java.Animal”中有私有访问权限
animal.show();
}
}
class Animal{
String name;
int age;
private int legs;//腿的个数
//对属性的设置
public void setLegs(int l){
if (l <= 0 && l % 2 == 0){
legs = 1;
}else{
legs = 0;//实际做法是抛出异常
}
}
//对属性的获取
public int getLegs() {
return legs;
}
public void eat(){
System.out.println("动物进食");
}
public void show(){
System.out.println("name = " + name + ",age = " + age + ",legs = " +legs);
}
}
四种权限修饰符的理解
封装的体现,需要权限修饰符的配合
- Java规定的四种权限:(从小到大排列):private、缺省(default)、protected、public
- 四种权限可以用来修饰类,及类的内部结构:属性、方法、构造器、内部类
- 修饰类的话,只能用public和缺省的