java学习day-6 封装

一、什么是封装?

把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类或者对象进行操作,对不可信的类或者对象隐藏。通俗就是信息封装起来,只能给自己相信的人看。

封装(Encapsulation)是面向对象编程(OOP)中的一个基本概念,它指的是将对象的状态(数据)和行为(方法)绑定在一起,并对外隐藏对象的内部细节。

在Java中,封装通过使用访问修饰符(如 privateprotected public)来实现,这些修饰符控制类的成员(变量和方法)的可见性和访问级别。

二、封装的分类

属性的封装:只需要使用private(私有)关键字修饰的属性,而且只能在类中使用。

方法的封装:对于方法的封装,将内部可以访问方法设置为public,将内部不能访问的方法设置为private。

1.类的封装

这是最常见的封装形式,通过定义类来封装数据和行为。类中的属性通常被设置为 private,并通过 public 的 getter 和 setter 方法提供对属性的访问和修改。

2.包的封装

Java 通过包(Package)组织类和接口,实现更高层次的封装。包可以将功能相关的类组织在一起,并通过访问修饰符(如 defaultprotected)限制其他包对类成员的访问权限。

// 文件路径:util/ArrayList.class
package util;

public class ArrayList {
    // 实现细节...
}
3.子包与并发封装

在复杂的项目中,包可以进一步划分为子包以增强封装性。

// 文件路径:util/concurrent/ConcurrentHashMap.class
package util.concurrent;

//在引用中提到的 concurrent 子包用于处理多线程任务,其中包含了 ConcurrentHashMap 和 Executors 等类。
public class ConcurrentHashMap {
    // 并发操作的具体实现...
}

好处:通过子包的划分,可以更好地管理类之间的依赖关系并提升代码的可读性和安全性

4.浏览器组件封装

了解了解即可...

在一些特定的应用场景中,Java 提供了对浏览器组件的封装能力,如 JDIC(Java Desktop Integration Components)项目。它允许 Java 应用程序与本地桌面环境集成,包括嵌入浏览器组件等功能。

// 示例:启动本地浏览器
import org.jdesktop.jdic.desktop.Desktop;
import org.jdesktop.jdic.desktop.InvocationException;

public class BrowserLauncher {
    public static void openWebPage(String url) {
        try {
            Desktop.getDesktop().browse(new URI(url));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

此处,类封装主要适用于需要深度整合操作系统功能的桌面应用程序开发。了解即可。

5.接口与抽象类的封装

接口和抽象类是另一种高级封装形式,它们通过定义通用的行为规范,隐藏具体实现细节。

public interface Animal {
    void eat();
}

public class Dog implements Animal {
    public void eat() {
        System.out.println("这只狗狗在吃东西");
    }
}

接口和抽象类的封装使代码更加灵活,便于后期扩展和维护。

三、封装的使用

实现封装的方式:

1.声明私有变量:使用 private 修饰符来限制对类成员变量的直接访问。

2.提供公共方法:通过提供 public 方法(getter setter)来允许外部访问和修改私有变量。

实例:

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age > 0 && age < 150) {
            this.age = age;
        } else {
            System.out.println("年龄输入错误");
        }
    }
}

在这个例子中是最普通的类的封装,其中nameage 变量被声明为 private,这意味着它们只能在 Person 类内部访问。为了允许外部代码访问这些变量,提供了 getName()setName()getAge()setAge() 方法。

四、封装的优点
  • 数据隐藏:通过限制对类成员的直接访问,可以防止外部代码意外或恶意地修改对象的状态。

  • 增强安全性:通过提供受控的访问方法,可以确保数据的有效性和一致性。

  • 简化调试:由于对象的状态变化被限制在类的内部,因此更容易跟踪和调试问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值