0
点赞
收藏
分享

微信扫一扫

JAVA 面向对象 特征一(封装与隐藏)详解

前言

耦合度:是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。联系越多,其耦合性越强,同时表明其独立性越差。

耦合性:在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

图示如下:

JAVA 面向对象 特征一(封装与隐藏)详解_封装

JAVA 面向对象 特征一(封装与隐藏)详解_java_02

这四种修饰符,可以修饰类,以及类的内部的结构:属性,方法,构造器,内部类
而具体的 修饰类只可以用:public ,缺省
修饰类内部的结构,这四种权限修饰符都可以。
总结封装性:Java提供了4种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性的大小。

下面演示下这四个访问修饰符,加强理解

项目目录结构,这样更清晰,知道我在说什么

JAVA 面向对象 特征一(封装与隐藏)详解_封装_03

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);
}
}


举报

相关推荐

0 条评论