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

简介: 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

图示如下:

这四种修饰符,可以修饰类,以及类的内部的结构:属性,方法,构造器,内部类

而具体的 修饰类只可以用: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);
    }
}


目录
相关文章
|
17天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
19 1
|
1月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
24 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
1月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
37 2
|
3月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
2月前
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
87 2
|
3月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
36 4
|
3月前
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
91 1
|
3月前
|
安全 Java 开发者
Java修饰符与封装:理解访问权限、行为控制与数据隐藏的重要性
Java中的修饰符和封装概念是构建健壯、易维护和扩展的Java应用程序的基石。通过合理利用访问权限修饰符和非访问修饰符,开发者能够设计出更加安全、灵活且高效的代码结构。封装不仅是面向对象编程的核心原则之一,也是提高软件项目质量和可维护性的关键策略。
34 1
|
3月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
2月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
20 0
下一篇
DataWorks