文档章节

Java面向对象三大特性之封装

Typing_Orange
 Typing_Orange
发布于 2017/04/22 18:11
字数 580
阅读 7
收藏 0

封装

  1. 概念

    将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
     
  2. 好处:

    a.只能通过规定的方法访问数据
    b.隐藏类的实例细节,方便修改和实现
  3. 封装的实现步骤
     



    例如:
    //1.定义一个类
    public class Telephone {
    	// 2.该类属性并没有用private权限修饰符 修饰
    	float screen;
    	float cpu;
    	float mem;
    }

    则在其他类文件中,通过创建该类对象,用 “ 对象名.属性名 = 修改的数值 ” 的方式,轻松修改对象中的属性值,我们无法做任何阻拦,无法对输入的数据有效性进行判断!这样就无法保证程式码的安全性!
     

    public class InitialTelephone {
    
    	public static void main(String[] args) {
    		Telephone phone = new Telephone();//创建一个Telephone类的对象
    		phone.screen = 5.0F;//由于Telephone类的属性没有用private的权限修饰符修饰,所以在其他类中创建该类的对象,可以轻松通过对象名加点语法访问并修改该类对象的属性值
      }
    }
    

    ↑这种方式是不好的,应该用封装的方式将我们的属性信息隐藏起来,给用户一个特定方法去访问我们的属性值。
    正确做法应如下:
     

    public class Telephone {
    	// 封装第一步,修改属性的可见性,属性值设为private
    	private float screen;
    
    	// 封装第第二步 ,创建getter/setter方法 用于属性的读写
    	public float getScreen() {
    		return screen;
    	}
    
    	// 封装第三步,在getter/setter方法中加入属性控制语句
    	public void setScreen(float screen) {
    		if (screen < 4.0F) {//如果传入的screen数值小于4.0F,自动赋值4.0F
    			System.out.println("您输入的数据不符合要求,已自动赋值4.0");
    			this.screen = 4.0F;
    		} else {
    			this.screen = screen;
    		}
    	}
    }

    最后在测试类中,将Telephone类实例化,并测试一下getter/setter方法:
     

    public class InitialTelephone {
    
    	public static void main(String[] args) {
    		Telephone tel = new Telephone();
    		tel.setScreen(3.5F);
    		System.out.println(tel.getScreen());
    	}
    
    }
    

    运行结果:
     

    您输入的数据不符合要求,已自动赋值4.0
    4.0
    





    总结:

              1、良好的封装能够减少耦合。

               2、类内部的结构可以自由修改。

              3、可以对成员进行更精确的控制。

              4、隐藏信息,实现细节。

© 著作权归作者所有

Typing_Orange
粉丝 15
博文 47
码字总数 30624
作品 0
南京
私信 提问
JavaWeb后台购物车类的具体实现

相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车; 就像我们平时去超市买东西一样,会推着购物车去买东西; 那么...

MrDong先生
2018/07/28
0
0
初试刀 浅谈Java和C#在面向对象上语法的区别

 做了几年了开发一直没有总结什么,回到了家乡的小城做了一名培训班的教员,教授软件开发的知识。细小的知识从头细细嚼来,别有一番滋味。或是以前遗漏的太多,或是确实没有系统的学习过,教...

夜默
2013/06/18
0
0
Java面向对象概述及三大特征(封装,继承和多态)

一、面向对象思想 Java是面向对象的高级语言,对于Java语言来说,万事万物皆对象! 它的基本思想是使用类,对象,继承,封装,消息等基本概念进行程序设计。面向对象程序的最小单元是类,类代...

编辑之路
01/10
0
0
Java语言学习(六):面向对象进阶

上篇博客中我们初步认识了Java面向对象编程,下面进一步学习下。 面向对象编程三大特性:封装、继承、多态。 封装隐藏了类的内部实现机制,对外界而言它的内部细节是隐藏的,暴露给外界的只是...

海岸线的曙光
2018/07/16
0
0
面向对象的三大特征

面向对象的三大特征:继承,多态,封装 类的继承: Java的继承通过extends来实现,实现继承的类称为子类(派生类),被继承的类称为父类(基类或超类)。例如:狗是动物的一种,也可以说够继承...

晨曦之光
2012/05/16
793
0

没有更多内容

加载失败,请刷新页面

加载更多

程序员随想-关于分享

最早的时候,文字是贵族这些上层人士才会学习的,底层人士没有资格和渠道去学习,同样用文字、图像等其他载体承载的知识大部分也只有贵族阶层才能享受的。后来有了造纸术、印刷术,成本降低,...

Lubby
21分钟前
0
0
聊聊hibernate的session-level repeatable reads

序 本文主要研究一下hibernate的session-level repeatable reads 实例 doInTransaction(session -> { Product product = new Product(); product.setId(1L); product.setQuanti......

go4it
33分钟前
0
0
ubuntu或ubuntu kylin优麒麟中安装QQ、wechat微信、百度网盘

从中国国内的地址下载deepin wine,码云上的。这样网速比较快。然后,按照说明向下安装。 https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu...

gugudu
44分钟前
2
0
基于redis分布式锁实现“秒杀”

最近在项目中遇到了类似“秒杀”的业务场景,在本篇博客中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路。 业务场景 所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源...

别打我会飞
今天
14
0
Zookeeper的实践指南

本章重点 1.数据存储2.基于Java API初探Zookeeper的使用3.深入分析Watcher机制的实现原理4.Curator客户端的使用,简单高效 数据存储 事务日志快照日志运行时日志 bin/zookeepe...

须臾之余
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部