三大特性之浅谈封装

前言

英语: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. @codechef - SERSUM@ Series Sum

    目录 @description@ @solution@ @part - 1@ @part - 2@ @part - 3@ @accepted code@ @details@ @description@ ...

  2. Project Euler Problem 21-Amicable numbers

    先说最暴力的算法,直接对一万内的每个数字暴力分解因子(对每个数字的时间复杂度是O(sqrt(n)的),然后,用个数组记录下来因子和,然后寻找 亲密数. 好一点:要先打个素数表,然后对每个数字,分解素因 ...

  3. angularJS $q

    1.$q $q是Angular的一种内置服务,它可以使你异步地执行函数,并且当函数执行完成时它允许你使用函数的返回值(或异常). 2.defer defer的字面意思是延迟, $q.defer()   ...

  4. 解析xml的方式

    1.DOM 理论:将标记文档语言一次性加载进内存,在内存中形成DOM树. 优点:操作方便,可以对文档进行CRUD(增删改查)操作,适用于服务端操作 缺点:占内存,不适用与手机,智能家居等内存容量小的设 ...

  5. Python--day72--Django内置的serializers序列化介绍

    序列化 Django内置的serializers def books_json(request): book_list = models.Book.objects.all()[0:10] from d ...

  6. TP5 在模板读出Session值

    模板取值: <p class="info">后台登录中心{$Request.session.username}</p> 也可以 {$Think.sessio ...

  7. mac 安装 adb

    安装命令 brew cask install android-platform-tools 测试安装情况 adb devices 设备打开开发者模式 略 查看log并过滤出设备id adb logca ...

  8. SpringBoot集成thymeleaf(自定义)模板中文乱码的解决办法

    楼主今天在学习SpringBoot集成thymelaf的时候报了中文乱码的错误,经过网上的搜索,现在得到解决的办法,分享给大家: package com.imooc.config; import or ...

  9. H5 多媒体标签

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 2018-2-13-win10-uwp-隐藏实时可视化

    title author date CreateTime categories win10 uwp 隐藏实时可视化 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 ...