Java三十五:Java 面向对象三大特征之一 封装

本文深入讲解了Java封装性的核心概念,包括封装的本质、意义及其实现方式。通过具体示例展示了如何利用私有属性和get/set方法来保护数据并提高程序的安全性和可维护性。

封装性

一、封装的本质
  1. 该露的露,该藏的藏

    程序设计要追求 “ 高内聚,低耦合 ”。
    高内聚:就是类的内部数据操作细节自己完成, 不允许外部干涉;
    低耦合:仅暴露少量的方法给外部使用。

  2. 封装(数据的隐藏)

    当创建一个类的对象以后,我们可以同通过“对象 . 属性” 的方式,给属性进行赋值。这时,赋值操作只是受属性的数据类型和存储范围的制约。

    但是,在实际问题中,我们往往需要给属性赋值加入额外的限制条件,避免用户再使用“对象 . 属性” 的方式对属性进行赋值,则需要将属性声明为私有的(private)。

  3. 封装性的体现

    将类的属性私有化(private)后,同时会提供公共(public)方法来获取(getXxx())和设置(setXxx())此属性的值。

    get:有返回值,无形参

     public int getAge(){
     ​	return age;
     }
    

    set:有形参,无返回值

     public void setAge(int a){
     ​	age = a ;
     }
    
  4. 其它封装性的体现:

    ① 不对外暴露的私有方法
    ② 单例模式

  5. 封装性的体现,需要权限修饰符来配合

    private、缺省(default,什么都不需要写,写了default反而报错)、protected、public

    修饰符类内部同一个包不同包的子类同一个工程
    private
    缺省
    protected√ / X
    public
  6. protected:

    ① 在同一个包内,protected与public的使用权限一样

    ② protected方法:父类和子类不同包

    • 在子类中,子类的实例化对象可调用不同包的父类的protected属性和未被重写的protected方法
    • 在子类中,父类的实例化对象不可调用自身任何protected方法或protected属性
    • 在父类中,子类的实例化对象可调用不同包的父类的protected属性和未被重写的protected方法,但不可以调用自身的任何protected结构。

    ③ 总结:在不同包的子父类的方法内,只可子类对象调用父类的保护型结构,自身对象都不可以调自身的protected结构

二、封装的意义
  1. 提高程序的安全性,保护数据
  2. 隐藏代码的实现细节
  3. 统一接口
  4. 提高系统的可维护性
三、JavaBean(在web中使用)
  1. 是一种用Java语言写成的可重用组件
  2. 其实是符合如下标准的Java类
    ① 类是公共的
    ② 有一个无参的公共构造器
    ③ 有属性,且有对应的get、set方法
  3. 用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其它JavaBean、apple程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和黏贴的功能,而不用担心任何改变
四、代码汇总
  • 测试程序

    package com.oop.Encapsulation;
    
    public class Application {
        public static void main(String[] args) {
            Create en = new Create();
            // 通过setXxx()方法给私有属性赋值
            en.setName("秦疆");
            //  秦疆
            System.out.println(en.getName());      
        }
    }
    
  • 创建封装程序

    package com.oop.Encapsulation;
        
    public class Create {
        
        // private 私有属性,即使是类被实例化,也不能被直接调用!!!
        private String name;    
        private int id;         
        private char sex; 
        
        // getXxx()方法:用于获取私有属性
        public String getName(){
            return this.name;
        }
        // setXxx()方法:用于给私有属性赋值
        public void setName(String name){
            this.name = name;
        }
        
        // 在IDEA中,通过 Alt + Insert快捷键,可自动生成某私有属性的get/set方法。
            public char getSex() {
                return sex;
            }	    
            public void setSex(char sex) {
                this.sex = sex;
            }	    
            public int getId() {
                return id;
            }	    
            public void setId(int id) {
                this.id = id;
            }	        
        }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

e_nanxu

感恩每一份鼓励-相逢何必曾相识

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

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

打赏作者

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

抵扣说明:

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

余额充值