java中面向对象程序三大特性 封装

本文详细介绍了Java中的封装概念,包括访问限定修饰符、包的概念及作用、如何导入包中的类、自定义包的方法,并通过实例展示了如何封装属性以及访问被封装的属性。

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

封装的概念

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

举个简单的例子:我们日常中使用的电脑就是封装计算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可

那么在Java中为什么要使用封装呢?
我们在程序设计的过程中要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己来完成,不允许外部干涉,低耦合:就是 仅暴露少量的方法给外部使用

在了解封装之前,先带我们了解一下Java中的访问限定修饰符和包

访问限定修饰符

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用

在这里插入图片描述

public:可以理解为一个人的外貌特征,谁都可以看得到 default:
对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了 private:只有自己知道,其他人都不知道
protected主要是用在继承中,继承部分详细介绍 default权限指:什么都不写时的默认权限
访问权限除了可以限定类中成员的可见性,也可以控制类的可见性

包的概念

为了更好的管理类,把多个类收集在一起成为一组,称为软件包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可

导入包中的类

Java 中已经提供了很多现成的类供我们使用. 例如Date类:可以使用 java.util.Date 导入 java.util 这个包中的 Date类

public 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;

public class Test {
    public static void main(String[] args) {
        Date date = new Date();
        // 得到一个毫秒级别的时间戳

        System.out.println(date.getTime());
   }
}

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

自定义包

在这里插入图片描述
在这里插入图片描述

基本规则 在文件的最上方加上一个 package 语句指定该代码在哪个包中. 包名需要尽量指定成唯一的名字,
通常会用公司的域名的颠倒形式(例如com.bit.demo1 ) 包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包,
那么会存在一个对应的路径 com/bit/demo1 来存储代码. 如果一个类没有 package 语句, 则该类被放到一个默认包中.

常见的包

  1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
  2. java.lang.reflect:java 反射编程包;
  3. java.net:进行网络编程开发包。
  4. java.sql:进行数据库开发的支持包。
  5. java.util:是java提供的工具程序包。(集合类等) 非常重要
  6. java.io:I/O编程开发包。

封装属性的访问

public class Student{
    private static String name;
    private static int age;
    }

此时可以看见被private修饰的成员就被封装起来了

class Textstudent{
    public static void main(String[] args) {
Student student=new Student();
student.name;
}
}

在这里插入图片描述

此时我们通过常规的对象去访问会发现name无法访问会报错,这是因为被封装的成员属性只能在当前类中使用无法被对象使用访问

那我们又该如何去访问被封装起来的成员呢?

通过成员构造方法在创建对象的时候去访问被封装起来的值为被封装起来的成员变量设置值

public class Student{
    private static String name;
    private static int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public static void show(){
        System.out.println(name+age);
    }
}
class Textstudent{
    public static void main(String[] args) {
  Student student=new Student("张三",11);
  student.show();
    }
}

在这里插入图片描述

通过系统自带的get和set方法去访问被封装起来的成员变量

public class Student{
    private static String name;
    private static int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public static String getName() {
        return name;
    }
    public static void setName(String name) {
        Student.name = name;
    }
    public static int getAge() {
        return age;
    }
    public static void setAge(int age) {
        Student.age = age;
    }
}
class Textstudent{
    public static void main(String[] args) {
  Student student=new Student("张三",11);
  student.setName("李四");
  student.setAge(11);
  System.out.println(student.getName());
  System.out.println(student.getAge());
    }
}

在这里插入图片描述
set和get快速生成的快捷键
在这里插入图片描述

封装作用功能

最后总结一下封装的作用
1.提高了程序的安全性,保护数据
2. 隐藏代码的实现细节
3. 统一接口
4. 增强系统的可维护性

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值