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


目录
相关文章
|
5月前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
185 1
|
5月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
234 0
|
6月前
|
安全 Java 编译器
Java面向对象
本文深入讲解了Java面向对象编程(OOP)的四大特性:封装、继承、多态与抽象,以及方法的设计与使用。通过示例展示了如何用类和对象组织代码,提升程序的可维护性与扩展性。
|
7月前
|
存储 Java 测试技术
Java基础 - 面向对象
面向对象编程是Java的核心,包含封装、继承、多态三大特性。封装隐藏实现细节,提升代码可维护性与安全性;继承实现类间IS-A关系,支持代码复用;多态通过继承、重写与向上转型,实现运行时方法动态绑定,提升系统扩展性与灵活性。
128 0
|
8月前
|
Java 数据库连接 数据库
Java 组件详细使用方法与封装实战指南
本指南详解Java核心组件使用与封装技巧,涵盖跨平台开发、面向对象编程、多线程、数据库操作等关键内容,并提供工具类、连接池、异常及响应结果的封装方法。结合Spring框架、MyBatis、Spring Boot等主流技术,助你掌握高质量Java组件设计与开发实践。
247 2
|
9月前
|
人工智能 Java 编译器
Java:面向对象
本文介绍了Java编程中的核心概念,包括包的命名规范与自动导入机制、构造方法的特点与使用、`this`和`super`关键字的作用、继承的基本规则、访问权限的设置、封装的意义、多态的实现原理以及`static`关键字的用法。通过详细解析每个知识点,并结合代码示例,帮助读者深入理解Java面向对象编程的核心思想与实践技巧。内容适合初学者及进阶开发者学习参考。
221 0
|
11月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
364 0
|
11月前
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。