三大特性之浅谈封装

前言

英语:Encapsulation——封装,包装。

面向对象的封装与真实世界的目的是一样的。封装能够使外部访问者不能随意存取对象的内部数据,隐藏了对象的内部细节,只保留有限的对外接口。外部访问者不用关心对象的内部细节,使得操作对象变得简单。

好处

先通过阅读下面的文字,再回来理解可能会更好一点

  1. 减少了耦合(物理学上类似相互影响的概念)
  2. 便于维护和修改
  3. 可以隐藏信息,一些具体实现代码,安全性
  4. 对成员变量精准控制

介绍(实现方式)

  1. Java 面向对象的封装性是通过对成员变量和方法进行访问控制实现的。这里就涉及到了访问控制的四个关键字了。

    类别\不同地方 同一个类 同一个包 不同包的子类 不同包非子类
    私有的(private) Yes No No No
    默认 Yes Yes No No
    保护的(protected) Yes Yes Yes No
    公有的(public) Yes Yes Yes Yes
  2. 封装是一种保护作用,将其变量以及方法保护起来,防止被随机访问,所以一定程度上增强了代码的安全性。

示例

  • 下面是代码示例,私有类只能在同一个类中被访问,否则会报错。
  private还可以防止直接访问特定的构造器(或全部的构造器)
package music.daima.ebook;
class TestClass{
private TestClass(){}
static TestClass make(){
return new TestClass();
}
} public class PrivateDaiMa {
public static void main(String args[]){
// TestClass x = new TestClass();
TestClass x = TestClass.make();
// 不能通过构造器来创建TestClass,要通过调用make方法才可以
}
}

报错信息说明TestClass的private将其构造器给私有化了,不能直接访问。

  • 访问不同包的protected方法(非子类的),先是定义在Music类中的BaoHu方法。

在其它包访问,就会报错,因为在Music里面这个BaoHu的方法用的是protected修饰的。

其实在Idea写代码时候,定义的属性之类可以在左下角有个概览,可以查看是什么类型的

  • 整体的test代码
import music.Music;//导入了music包的Music类

class test{
test(int i){ i = i + 1; }
private String name;//将其变为public String name;的话下面就可以访问
public int num=2;//公有的可以被访问
double i = 2.2;//默认的定义,也可以被访问,在本包里面 }
public class FengZhuang {
public static void main(String args[]){
test a = new test(6);
System.out.println(a.num);
//a.name就会报错,因为在上面的name是私有的
Music ceshi = new Music();//导入了不同的包中的类 // ceshi.BaoHu();报错,是在其它包里的protected方法 }
}

小结

访问成员有两种方式:一种是调用,即通过类或对象调用它的成员,如p.printX()语句;另一种是继承,即子类继承父类的成员变量和方法。在开发使用的时候,应该尽量限制类中成员的可见性

  1. 公有访问级别任何情况下两种方式都可以;(public)

  2. 默认访问级别在同一包中两种访问方式都可以,不能在包之外访问;()

  3. 保护访问级别在同一包中与默认访问级别一样,两种访问方式都可以。但是在不同包之

    外只能继承访问;(protected)

  4. 私有访问级别只能在本类中通过调用方法访问,不能继承访问。(private)

感谢阅读!!!

才疏学浅,有不对的地方请指出。

浅谈Java三大特性之封装的更多相关文章

  1. 浅谈Java三大特性

    Java三大特性想必大家都不陌生:封装.继承以及多态.很多刚接触Java的小伙伴都会想,它们到底有什么了不得之处,又赋予Java这门编程语言什么魔力呢?今天我们来探讨一下吧~~ 首先,名词解释: 封装 ...

  2. 浅谈Java三大特性之多态

    目录 一.前言 二.发生的条件 三.多态包含(或者说体现在)两个方面: 四.示例 感谢阅读 一.前言 这篇讲下三大特性之一的多态,可以通俗得去理解,多种形态,多种姿态... 那么在面向对象的程序设计中 ...

  3. 浅谈Java三大特性之继承

    前言 简单用伪代码去介绍一些 父类与子类的构造函数问题 others 前言 类的继承性是面向对象语言的基本特性,多态性前提是继承性.Java 支持继承性和多态性.——Java从小白到大牛 继承:三大特 ...

  4. JAVA三大特性之一——封装

    自学java已经有一段时间了,但是感觉对于很多知识点还是有必要总结和整理一下,下面我就来说一下我对JAVA三大特性之一——封装特性的认识和理解. 封装,从字面意思可以看出来,就是包装,也就是把我们写好 ...

  5. java三大特性:封装、继承、多态

    Java三大特性之封装   一.定义 封装性指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部的信息,而是通过该类所提供的方法来实现对内部信息的操作和访问. 二.使用封装的好处: 1 ...

  6. JAVA基础第二章-java三大特性:封装、继承、多态

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...

  7. Java三大特性:封装,继承,多态

    java提高篇(一)-----理解java的三大特性之封装 概念: 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独 ...

  8. java三大特性(封装、继承、多态)

    oop(面向对象程序设计)具有三大特性:封装.继承.多态 一.封装 封装就是讲类的信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类的实现隐藏信息的操作和访问. 实现封装 1.需要修改属性的访问 ...

  9. 浅谈Java三大框架与应用

    前言:对于一个程序员来说,尤其是在java web端开发的程序员,三大框架:Struts+Hibernate+Spring是必须要掌握熟透的,因此,下面谈谈java三大框架的基本概念和原理. JAVA ...

随机推荐

  1. c++第一次的个人作业

    循环结构是c++中重要的结构用以实现代码的反复使用 三种不同的循环结构以及嵌套是必须认识与能够使用的 三种循环结构分别是: 在for循环中可以在for后的括号内加入初始条件,循环条件与参数变化.使得整 ...

  2. oralce 分离表和索引

    总是将你的表和索引建立在不同的表空间内(TABLESPACES). 决不要将不属于ORACLE内部系统的对象存放到SYSTEM表空间里. 同时,确保数据表空间和索引表空间置于不同的硬盘上.   “同时 ...

  3. URL的转义和解析

    在开始python编程之前我们先来看看一个关与url的知识 在url中会有一些特殊字符,如果你写过cgi程序,并且提交一个表单去调用你的cgi,你会很清楚的 像?name=aiqier&age ...

  4. pip安装指定版本的应用

    可以在pip后使用 == 运算符指定版本号 pip install applicationName==version

  5. H3C 帧中继子接口

  6. hibernate中因双向依赖而造成的json怪相--springmvc项目

    简单说一下Jackson 如果想要详细了解一下Jackson,可以去其github上的项目主页查看其版本情况以及各项功能.除此以外,需要格外提一下Jackson的版本问题.Jackson目前主流版本有 ...

  7. Django入门3--Models

  8. 5-1rquests模拟登陆知乎之httpcode

    1,状态码: 400错误:请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里 2,requests库:python常用的库,有空仔细阅读一下官方文档

  9. POJ 1511 Invitation Cards(逆向思维 SPFA)

    Description In the age of television, not many people attend theater performances. Antique Comedians ...

  10. Common Logging包装设计

    类设计 LogFactory根据当前环境加载具体的Log实现: 1.从缓存中加载LogFactory 2.从系统属性org.apache.commons.logging.LogFactory 中加载L ...