面向对象编程第一式:封装 (Java篇)

本文介绍了面向对象编程的三大特性之一——封装,通过电脑和用户交互的例子阐述了封装的概念。随后讲解了包的概念、访问权限的四种限定符(public、private、default、protected)、static成员及其用途,以及代码块的不同类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇会加入个人的所谓‘鱼式疯言’
❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言
而是理解过并总结出来通俗易懂的大白话,
小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.
🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

在这里插入图片描述

前言

小伙伴们有了解过面向对象的三大特性吗?
分别是:封装继承多态

接下来的文章小编讲带着大家重点理解 封装继承多态

而在本篇文章中小编讲解的就是我们面向对象的第一式: 封装

目录

  1. 封装
  2. 封装扩展之包
  3. 访问限定符
  4. static 成员
  5. 代码块

一. 封装

1. 封装的概念

面向对象程序三大特性:封装、继承、多态
而类和对象阶段,主要研究的就是封装特性。何为封装呢?
简单来说
就是 套壳屏蔽细节
在这里插入图片描述

比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器,USB插孔等

让用户来和计算机进行交互,完成日常事务。

但实际上:电脑真正工作的却是CPU显卡内存等一些硬件元件。

在这里插入图片描述

对于计算机使用者而言,不用关心 内部核心部件,比如主板上线路是如何布局的,CPU内部是如何设计的等…

用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此 计算机厂商在出厂时,在外部套上壳
子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可。

这时小伙伴应该就可以引出咱封装的概念了吧 ! ! !

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互

但在谈及封装的理解之前,小编就不得不先介绍一下我们的封装扩展的包 的概念了 💕 💕 💕

二. 封装扩展之包

这时小爱同学又蒙圈了了,啥是包呢,为啥我们了解封装之前要提及包的概念呢 ? ? ?

小伙伴们不妨先带着这些疑问来慢慢和小编一起探讨吧 ❤️ ❤️ ❤️

1. 包的概念

在面向对象体系中,提出了一个软件包的概念,

即:为了更好的管理类,把多个类收集在一起成为一组,称为 软件包

有点类似于 目录

比如:为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性 的歌曲放在相同文件下

也可以对某个文件夹下的音乐进行更详细的分类。

在这里插入图片描述
在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式

比如:一个包中的类不想被其他包中的类使用。

包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可

举个栗子

Java 中已经提供了很多 现成的类 供我们使用.

例如 Date类:可以使用 java.util.Date 导入 java.util 这个包中的 Date类.

 class Test {
   
    public static void main(String[] args) {
   
        java.util.Date date = new java.util.Date();
// 得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

在这里插入图片描述

但是这种写法比较麻烦一些, 可以使用 import 语句导入包.

import java.util.Date;
class Test {
   
    public static void main(String[] args) {
   
        Date date = new Date();
// 得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

在这里插入图片描述

如果需要使用 java.util 中的其他类, 可以使用 import java.util.

import java.util.*;
class Test {
   
    public static void main(String[] args) {
   
        Date date = new Date();
// 得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

在这里插入图片描述

鱼式疯言

但是小编更建议 显式的指定要导入的类名. 否则还是容易出现冲突的情况.

import java.util.*;
import java.sql.*;
public class Test {
   
    public static void main(String[] args) {
   
// util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错
        Date date = new Date();
        System.out.println(date.getTime());
    }

//    // 编译出错
//    Error:(5, 9) java: 对Date的引用不明确
//    java.sql 中的类 java.sql.Date 和 java.util 中的类 java.util.Date 都匹配
}

在这里插入图片描述

在这种情况下需要使用完整的类名

import java.util.*;
import java.sql.*;
public class Test {
   
public static void main(String[] args) {
   
java.util.Date date = new java.util.Date();
System.out.println(date.getTime());
}
}

2.自定义包

<1>基本规则

  • 在文件的最上方加上一个 package 语句指定该代码在哪个包中.

  • 包名需要尽量指定成唯一的名字, 通常会用公司的域名的

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邂逅岁月

感谢干爹的超能力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值