Day6.封装,包的概述

本文详细介绍了Java中的封装概念,包括如何通过修改属性可见性、设置setter和getter方法以及添加存取限制来实现封装。此外,还探讨了包的作用,如组织类、防止命名冲突。文中提供了一个Person类的封装示例,展示了如何在setter方法中进行合法性检查。最后,讨论了包的定义和使用,展示如何使用包对类进行分类。

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

3. 封装

3.1封装概述

Java中封装的实质就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法开实现对隐藏信息的操作和访问。

​ 封装反映了事物的相对独立性,有效避免了外部错误对此对象的影响,并且能对对象使用者由于大意产生的错误操作起到预防作用。同样面向对象编程提倡对象之间实现松耦合关系。

​ 封装的好处在于隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便的加入存取控制修饰符,来限制不合理的操作。
注意:

​ 松耦合就是指尽量减少对象之间的关联性,以降低他们之间的复杂性和依赖性。

3.2封装的步骤

1.修改属性的可见性

将Person类中的属性public修改为private即可

将Person类的属性私有化

public class  Person{
  
  		private String name;
  		private String gender;
  		private String age;
  		
  		
}

分析:将public修改为private后,其他类就无法访问,如果访问则需要进行封装的第二步

2.设置setter和getter()方法


将Person类中的私有属性添加setter和getter()方法

public class Person{
  
  private String name;
  
  private String gender;
  
  private int  age;
  
  public String getName(){
    
    return name;
  }
  
  public void setName(String name){
    
    this.name=name;
  }
  
  
  public String getGender(){
    
    return gender;
  }
  
  pubic void setGender(String gender){
    
    this.gender=gender;
  }
  
  public int getAge(){
    
    return age;
  }
  
  public void setAge(int age){
    
    this.age=age;
  }
  
  
}
3.设置属性的存取限制

此时,还没对属性设置合法性检查,需要在setter方法中进一步利用条件判断语句进行赋值限制。

为setter方法设置限制

public class Person {


    public String name;

    public int age;

    public String gender;


    public String getName(){
        return name;
    }

    public void  setName(String name){

        this.name=name;
    }

    public String getGender(){

        return gender;
    }

    public void setGender(String gender){

        this.gender=gender;
    }

    public int getAge(){

        return age;
    }

    //修改set方法,设置合法性检查
    public void  setAge(int age){

        if (age<0||age>150) {
            System.out.println("***输入年龄为"+age+",该年龄不合法,将重置***!");
            return;
        }
        this.age=age;
    }



    //构造方法
    public Person(){

        this.name="无名氏";
        this.gender="男";
        this.age=18;
    }

    public Person(String name,String gender,int age){

        this.name=name;
        this.gender=gender;
        this.age=age;
    }

    //方法:自我介绍方法:转义字符:\r表是把光标移到所在行开头;\n是把光标移到下一行开头

    public void say(){

        System.out.println("自我介绍以下\r\n姓名:"+this.name+"\r\n性别:"+this.gender+"\r\n年龄:"+this.age+"岁");
    }


}

测试方法:

public static void main(String[] args) {

        Person person = new Person();

        person.setName("艾琳");
        person.setAge(221);
        person.setGender("少女");
        person.say();
    }

4.1包的概述

Java中的包机制也是封装的一种形式。

​ 包的主要有以下方面的作用:

​ 1).包允许将类组合成较小的单元(类似文件夹),易于找到和使用相应的类文件

​ 2).防止命名冲突:Java中只有在不同包中的类才能重名。不同的程序员命名同名的类在所难免,类名就容易管理了,A定义了一个类Sort,封装在包A中,B定义了一个类Sort,封装在包B中,在使用时,为了区别A和B定义的Sort类,可以通过包名区分开,如A.Sort和B.Sort分别对应于A和B定义的Sort类。

4.2包的定义

定义包的语法格式如下:

package包名:

​		package是关键字

包的声明必须是Java源文件中的第一条非注释性语句,而且一个源文件只能有一个包声明语句,设计的

​ 包需要与文件系统结构相对应。因此,在命名包时,要遵守以下编码规范。

​ 1).一个唯一的包名前缀通常是全部小写的ASCII字母,并且是一个顶级域名com、edu、gov、net及org,通常使用组织的网络名的逆序。例如,如果域名为javagroup.net,可以声明包为“package net.javagroup.mypackage;”

​ 2) 包名的后续部分依次不同机构各自内部的规范不同而不同。这类名规范可能以特定目录名的组成来区分部门、项目、机器或注册名、如“package net.javagroup.research.powerproject”。research表示项目名,

powerproject表示部门名

例如,下面的代码中,为了Person类定义了包cn.shujia.pack1。

​ package cn.shujia.pack1;

​ public class Person{

​ //省略类的内代码

​ }

4.3包的使用


使用包将Person类和PersonTest类进行分类

import cn.shujia.pack1.Person;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xem626

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值