三大特性之浅谈封装

前言

英语: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. php统计近一周和近30天的用户数据

    https://blog.csdn.net/shenpengchao/article/details/59073589 先上一张效果图 这边用的是echarts插件http://echarts.bai ...

  2. H3C 快速以太网和千兆以太网

  3. Pytest - 使用介绍

    1. 概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手,文档丰富: 2.支持参数化,可以细粒度地控制要测试的测试用例: 3.能够支持简单的单 ...

  4. POJ2406 Power Strings 题解 KMP算法

    题目链接:http://poj.org/problem?id=2406 题目大意:给你一个字符串 \(t\) ,\(t\) 可以表示为另一个小字符串循环了 \(K\) 了,求最大的循环次数 \(K\) ...

  5. 求解最长回文串 manachar算法

    转载:http://blog.sina.com.cn/s/blog_70811e1a01014esn.html ;i<len;++i){ if(mx>i) p[i]=min(p[*id-i ...

  6. 微信小程序wx.request POST获取不到数据解决办法

    get //发起请求     wx.request({       url: 'http://www.xiaochengxu.com/home/index/curd', //仅为示例,并非真实的接口地 ...

  7. java 事件监听机制组成

    事件源(组件) 事件(Event) 监听器(Listener) 事件处理(引发事件后处理方式) 事件监听机制流程图 务必记牢: 确定事件源(容器或组件) 通过事件源对象的addXXXListener( ...

  8. CF1220

    CF1220 A one和zero特的字母分别是'n'和'z' 输出他们的数量即可 #include<cstdio> #include<iostream> #include&l ...

  9. Numpy 返回数组大小

    import numpy as np a = [[1, 2], [3, 4], [5, 6]] b = np.array(a) len(a) # 3 len(b) # 3 np.size(a) # 3 ...

  10. CodeForces 1096D(线性dp)

    传送门 •题意 给出一个长度为n的字符串s,对于每个$s_{i}$有$a_{i}$的价值 让你删除最小的价值,使得字符串中不存在$hard$这个子序列 •思路 设dp[1]是不存在以$h$为前缀的最小 ...