首页 > 编程语言 >Java面向对象之封装性

Java面向对象之封装性

时间:2024-03-07 20:12:24浏览次数:27  
标签:Java String s1 private 面向对象 封装 public name

封装性

我要用洗衣机,只需按开关即可,无需了解洗衣机的内部结构。

以上这句话可能大家在搜索学习封装性的时候可能都听过,可是这句话严重误导了我。可能是由于面向过程的学习太过深刻,我联想到了函数,函数不就是把洗衣服的过程全部“封装”起来了吗?我只需要调用函数方法就可以了呀,确实无需了解函数内部是怎么写的。那这是“封装”吗?答案:不是

通俗地讲,封装就是把该隐藏的隐藏起来,该暴露的暴露出来。

所谓封装,就是把客观事物封装成抽象概念的类,并且类可以把自己的数据和方法只向可信的类或者对象开放,向没必要开放的类或对象隐藏。外界无法直接进行修改等操作,只能通过给定的当时进行访问和修改。

为了实现隐藏或暴露的不同权限,就要用到权限修饰符:

修饰符 本类内部 本包内 其他包的子类 其他包非子类
private
缺省
protected
public

注意:外部类只能用public、缺省修饰;其它则上述四种均可。

封装性的经典体现:

  1. 私有化(private)类的属性,外界无法直接进行修改等操作,只提供给定的公共的(public)set\get方法进行访问和修改。
//学生类
public class Student {
    private String name;
    public Student(String n){
        this.name=n;
    }
    public String getName(){
        return this.name;
    }
    public void setName(String n){
        this.name=n;
    }
}
//测试运行类
public class Main {
    public static void main(String[] args) {
        Student s1=new Student("小杰");
        System.out.println(s1.getName());
        s1.setName("小红");
        System.out.println(s1.getName());
        
    }
}

这就是封装性的一个经典使用案例,外界只能通过给定的set\get方法访问和修改name这个属性,而不能通过对象直接调用属性,如s1.name就是错误的,因为name属性是私有的。

那很多人就会想着说,这到底有什么用呢?name属性不也一样是被修改了吗?其实我也有这个疑问,就上面这个例子来说,其实可以在set方法中添加一些合法性检验,比如:

    public void setName(String n){
        if(n.length()<2){
            System.out.println("Error,不合法");
            return;
        }

在网上找的课程上说,这是”提高系统的安全性,隐藏代码的实现细节“。有没有人能结合具体的案例说一下这么封装的作用到底是什么

标签:Java,String,s1,private,面向对象,封装,public,name
From: https://www.cnblogs.com/yang-xiaojie/p/18059657

相关文章

  • Java编程--观察者(Observer)设计模式
    观察者设计模式观察者设计模式是一种行为设计模式,允许对象在其状态改变时通知其他依赖对象。它创建了一种发布者(Subject)和订阅者(Observer)之间的依赖关系。这种模式经常用于实现事件处理系统。观察者模式的关键组成部分:Subject(主题):拥有添加和删除观察者的方法,以及通知所有观察......
  • MyBatis Java 和 数据库 数据类型对应表
    类型处理器(typeHandlers)MyBatis在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时,都会用类型处理器将获取到的值以合适的方式转换成Java类型。下表描述了一些默认的类型处理器。提示 从3.4.5开始,MyBatis默认支持JSR-310(日期和时间API)。类型处......
  • Java日期
    Java8之前的传统日期APIDate转换成字符串importjava.text.SimpleDateFormat;importjava.util.Date;/***@authorPickle*@versionV1.0*@date2024/3/714:43*/publicclassDemo{publicstaticvoidmain(String[]args){//创建Date类,构造的......
  • Java取当前时间的一分钟后,并格式化输出
    1.Java1.8以前Calendarinstance=Calendar.getInstance();//获取当前日期时间instance.add(Calendar.MINUTE,1);//加1分钟System.out.println(newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(instance.getTime()));2.Java1.8及以后System.out.println(DateTimeFor......
  • Java登陆第三十二天——前端工程化
    现如今项目结构臃肿,MAVEN中拥有前端+后端代码。为了提高效率和降低成本,前端也需要结构化的管理,但MAVEN管理前端较为麻烦工程独立之后也就是前后端分离。前后端分离的优点开发分离(最好人也分离)部署分离前端工程化实现技术栈前端工程化实现的技术栈有很多,我们采用......
  • java使用ssh通道连接mysql
    添加依赖<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency>添加配置importcom.jcraft.jsch.JSch;......
  • java 注解
    1、什么是注解      类似一种特殊的注释,可以在程序运行时被反射获取,如同标签。2、注解分类内置注解自定义注解内置注解Java定义了一套注解,共有7个,3个在java.lang中,剩下4个在java.lang.annotation中。作用在代码的注解:@Override-检查该方法是否是重......
  • macOS m1芯片报错 java.lang.UnsatisfiedLinkError: no taos in java.library.path
    项目中有用到TDengine,MacOSm1芯片本地开发启动项目报错如下java.lang.UnsatisfiedLinkError:notaosinjava.library.path方案一(推荐)以上错误是因为java在连接TDengine数据库的时候没有找到本地函数库。本地安装一下TDengine,然后在/usr/local/lib/下就会有taos函数库。因此......
  • java过滤器拦截路劲问题
    在我们使用filter过滤器时注解@WebFilter("/serverlet/demo1/")多层目录只针对文件注解@WebServlet(name="Servlet1",value="/serverlet/demo1/test1")具有过滤作用(原因:注解路径相同),其中“@WebFilter("/serverlet/demo1/")”括号里的*代表只要serverlet注解前半部分相同的文......
  • 熟悉又陌生的JavaWeb 第2天
    传送门JSP基本语法什么是servlet自定义Servlet,直接使用抽象好的HttpServlet更好MyCustomServletpublicclassMyCustomServletextendsHttpServlet{@SerialprivatestaticfinallongserialVersionUID=-599450886992695746L;@Overrideprotected......