前言
耦合度:是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。联系越多,其耦合性越强,同时表明其独立性越差。
耦合性:在android开发过程中,主要注意的是activity间关联程度。耦合的强弱取决于activity间意图的复杂性、调用的方式以及通过界面传送数据的多少。
我们的程序设计追求就是:‘高内聚,低耦合’
高内聚:类的内部操作细节自己完成,不允许外部干涉。
封装性思想:隐藏对象内部的复杂性,只对外公开简单的接口,便于外界调用,从而提高系统的可扩展性,可维护性。
通俗的说:就是把该隐藏的隐藏起来,该暴露的暴露出来,这就是封装性的设计思想
下面来举个例子来看看封装性的体现:
public class demo4 { public static void main(String[] args) { Animal animal=new Animal(); animal.name="大黄"; animal.age=6; // animal.legs=2; animal.setLegs(-4); animal.info(); System.out.println(animal.getLegs(1)); } } class Animal{ String name; int age; private int legs; //对属性的设置 public void setLegs(int aa){ if (aa>=0&&aa%2==0){ legs=aa; }else { legs=0; } } //获取属性的值 public int getLegs(int legs){ return legs; } public void info(){ System.out.println("name:"+name+",age:"+age+",legs:"+legs); } }
对成员变量legs进行的设置,加上权限修饰符private,对属性进行设置,和获取值,就是用setLegs()和getLegs()方法,这就是封装性的一种体现。
比如还有:不对外暴露的私有方法,也是封装性的体现。
封装性的体现,需要权限修饰符来配合。
有四种权限修饰符,权限大小由小到大排序为:
private ,缺省 ,protected ,public
图示如下:
这四种修饰符,可以修饰类,以及类的内部的结构:属性,方法,构造器,内部类
而具体的 修饰类只可以用:public ,缺省
修饰类内部的结构,这四种权限修饰符都可以。
总结封装性:Java提供了4种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性的大小。
下面演示下这四个访问修饰符,加强理解
项目目录结构,这样更清晰,知道我在说什么
1、首先演示在同类中的情况,在modifier包下创建A类
/** * @Author: ly * @Date: 2022/11/13 * @Description: 演示在同类中 四个访问修饰符 */ public class A { //四个属性 public int n1 = 100; protected int n2 = 200; int n3 = 100; private int n4 = 100; public void m1() { //该方法可以访问 四个属性 System.out.println("n1=" + n1 + " n2=" + n2 + " n3=" + n3 + " n4=" + n4); } }
2、演示在同包中,在modifier包下创建B类
/** * @Author: ly * @Date: 2022/11/13 * @Description: 演示在同包中 四个访问修饰符 */ public class B { public void say() { A a = new A(); //在同一个包下,可以访问public、protected、和 默认修饰属性或方法,不能访问private 属性或方法 System.out.println("n1=" + a.n1 + " n2=" + a.n2 + " n3=" + a.n3); } }
3、演示在子类中,新建一个包model,让后创建C类
/** * @Author: ly * @Date: 2022/11/13 * @Description: 演示在子类中 四个访问修饰符 */ public class C extends A { public void say() { //在子类中,前提是该子类与A类不在同一个包中,如果C类与A类在同一个包中,默认的修饰符也可以访问到 //这点不要弄混了。(因为默认修饰符在同包中修饰的属性或方法本来就是可见的) //可以访问public、protected修饰属性或方法,不能访问private,默认 属性或方法 System.out.println("n1=" + n1 + " n2=" + n2); } }
之后在modifier包下,创建Test类进行测试输出
public class Test { public static void main(String[] args) { A a = new A(); a.m1(); B b = new B(); b.say(); C c = new C(); c.say(); } }
输出结果
n1=100 n2=200 n3=100 n4=100 n1=100 n2=200 n3=100 n1=100 n2=200
4、演示在不同包中,在model包中创建Test类
/** * @Author: ly * @Date: 2022/11/13 * @Description: 演示在不同包中 */ public class Test { public static void main(String[] args) { A a = new A(); //在不同包下,可以访问public修饰的属性或方法 //但是不能访问protected,默认,private修饰的属性或方法 System.out.println(a.n1); } }