面向对象三大特征之封装

封装

概述

封装是隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式,比如类和方法

封装的两层含义:
1.对功能的封装,比如一个方法,方法就是对功能的实现
2.对数据的封装,即把对象的属性进行封装

封装的表现:

  1. 方法就是一个最基本的封装
  2. 类其实就是一个封装体

private关键字:
是一个权限修饰符,可以用来修饰成员变量和成员方法,被私有化的成员只能在本类中被访问。
注: 私有只是封装的一种体现

封装的好处:

  • 提高代码的复用性
  • 隐藏实现细节,对外提供可以访问的方法,便于使用者去使用,这是核心之一
  • 提高了安全性

封装的原则:
将不需要对外提供的内容都隐藏起来,包括属性和方法,并提供setXxx getXxx 方法对其进行访问

代码练习

代码练习1:封装的必要性

package cn.tedu.oop;
/*本类用来测试封装的必要性*/
public class TestPrivate111 {
    public static void main(String[] args) {
        Hero h = new Hero();
        //修改普通属性的值
        h.name = "宋江";
        /*需要隐藏的内容需要进行封装,不然能够直接修改值,不安全*/
        //h.force = 60; //该属性用private进行封装,不能直接修改值
        //打印修改后的属性值
        System.out.println(h.name);
        //使用提供的方法对封装的属性进行修改和打印
        h.setForce_value(60);
        System.out.println(h.queryForce_value());
    }
}

class Hero{
    //定义该类的普通属性
    String name = "晁盖";
    //封装需要隐藏的内容:武力值
    private double force_value = 80;
    //提供方法1:对武力值进行查询
    public double queryForce_value(){

        return force_value;
    }

    //提供方法2:对武力值进行设置

    public void setForce_value(double force_value) {
        this.force_value = force_value;
    }
}

代码练习:封装属性

package cn.tedu.oop;
/*本类用来练习封装属性*/
public class TestPrivate21 {
    public static void main(String[] args) {
        Friends f = new Friends();
        f.sno = 18;
        //f.name = "孟亚军";
        //f.subject = "数学分析";
        System.out.println(f.sno); //输出结果:18

        f.eat();//输出结果:周末一起下馆子
        f.play();//输出结果: 一起玩王者荣耀

        f.setName("孟亚军");
        System.out.println(f.getName());//输出结果: 孟亚军

    }
}

class Friends{
    //定义普通属性:学号
    int sno = 24;
    //定义需要隐藏的属性:姓名 , 科目
    private String name = "王浩江";
    private String subject = "高等代数";

    //提供被封装属性的get和set方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    //定义普通方法
    public void play(){
        System.out.println("一起玩王者荣耀");
    }
    public void eat(){
        System.out.println("周末一起下馆子");
    }
}

代码练习:封装方法

package cn.tedu.oop;
/*本类用来测试方法的封装*/
public class TestPrivate3 {
    public static void main(String[] args) {
        Apple a = new Apple();
        //没有封装的方法,调用没有限制
        a.clean();
        //a.eat(); //由于eat()被封装,所以再此处直接调用会显示报错
    }
}

class Apple{
    public void clean(){
        System.out.println("苹果是洗洗才能吃的");
        //再已有的公共方法clean()中调用被封装的私有方法eat()
        eat();
    }
    private void eat(){
        System.out.println("我要吃洗过的苹果了");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值